import React, { useState, useEffect, useCallback, useMemo } from 'react' import PropTypes from 'prop-types'; import { NavLink, } from "react-router-dom"; import classes from '@/scss/home/Home.module.scss' import { useConfig } from '@/state/config'; import { useLanguage } from '@/state/language' import { useHeader } from '@/state/header'; import { useAppbar } from '@/state/appbar'; import VoiceElement from '@/component/voice'; import { useAtom } from 'jotai' import { atomWithStorage } from 'jotai/utils'; import CharIcon from '@/component/char_icon'; import Border from '@/component/border'; import useUmami from '@parcellab/react-use-umami'; import Switch from '@/component/switch'; const voiceOnAtom = atomWithStorage('voiceOn', false) let lastVoiceState = 'ended' export default function Home() { // eslint-disable-next-line no-unused-vars const _trackEvt = useUmami('/') const { setTitle, setTabs, currentTab, setHeaderIcon } = useHeader() const { config } = useConfig() const [content, setContent] = useState([]) const [voiceOn] = useAtom(voiceOnAtom) const [voiceSrc, setVoiceSrc] = useState(null) const [voiceReplay, setVoiceReplay] = useState(false) useEffect(() => { setTitle('dynamic_compile') setTabs([{ key: 'all' }, { key: 'operator' }, { key: 'skin' }]) setHeaderIcon(null) }, [setHeaderIcon, setTabs, setTitle]) useEffect(() => { setContent(config?.operators || []) }, [config]) const handleAduioStateChange = useCallback((e, state) => { lastVoiceState = state if (state === 'ended') { setVoiceReplay(false) } }, []) const isShown = useCallback((type) => currentTab === 'all' || currentTab === type, [currentTab]) const handleVoicePlay = useCallback((src) => { if (!voiceOn) { setVoiceSrc(null) } else { if (src === voiceSrc && lastVoiceState === 'ended') { setVoiceReplay(true) } else { setVoiceSrc(src) } } }, [voiceOn, voiceSrc]) return (
{ content.map((v) => { const length = v.filter((v) => isShown(v.type)).length return ( ) }) }
) } function OperatorElement({ item, hidden, handleVoicePlay }) { const { textDefaultLang, language, alternateLang } = useLanguage() return useMemo(() => { return (