import { type FC, useEffect, useState } from 'react'; import AlertModal from '$components/AlertModal'; import EligibilityModal from '$components/EligibilityModal'; import Footer from '$components/Footer'; import LoadingOverlay from '$components/LoadingOverlay'; import { useEligibility } from '$hooks/useEligibility'; import { useInputValidation } from '$hooks/useInputValidation'; import { useModal } from '$hooks/useModal'; import { useStatus } from '$hooks/useStatus'; import { useTailnetNames } from '$hooks/useTailnetNames'; import { useTimer } from '$hooks/useTimer'; import { useTokens } from '$hooks/useTokens'; import { useWords } from '$hooks/useWords'; import MainScreen from '$screens/MainScreen'; import TailnetWordsScreen from '$screens/TailnetWords'; import TokenListScreen from '$screens/TokenList'; import WordListScreen from '$screens/WordList'; const App: FC = () => { const [inputValue, setInputValue] = useState(''); const [error, _setError] = useState(null); const [showAlert, setShowAlert] = useState(false); const [alertMessage, setAlertMessage] = useState(''); const [claimedToken, setClaimedToken] = useState(null); const [screen, setScreen] = useState< 'main' | 'words' | 'tokens' | 'wordlist' >('main'); const [isTransitioning, setIsTransitioning] = useState(false); const handleShowWordsScreen = () => { setIsTransitioning(true); setScreen('words'); }; const handleShowTokensScreen = () => { setIsTransitioning(true); setScreen('tokens'); }; const handleBackToWords = () => { setIsTransitioning(true); setScreen('words'); }; const handleBackToMain = () => { setIsTransitioning(true); setScreen('main'); }; const handleShowWordListScreen = () => { setIsTransitioning(true); setScreen('wordlist'); }; const { status, setStatus, timer, loading, setLoading } = useTimer(); const { handleStart, handleStop } = useStatus(setStatus); const { tails, scales } = useWords(); const { tailnetNames, setTailnetNames, handleAddTailnet, handleRemoveTailnet, } = useTailnetNames(tails, scales, setStatus, inputValue, setInputValue); const [ tokens, setTokens, { handleClaimToken, handleRemoveToken, error: claimTokenError }, ] = useTokens({ setLoading, setAlertMessage, setShowAlert, setClaimedToken, }); const { eligibility, eligibilityLoading } = useEligibility(); const { alertModalRef, alertCloseBtnRef, handleAlertCloseModal } = useModal( showAlert, setShowAlert, setAlertMessage, claimedToken, setClaimedToken, setTokens, setTailnetNames, ); const isInputValid = useInputValidation( inputValue, tails, scales, tailnetNames, ); useEffect(() => { if (isTransitioning) { const timer = setTimeout(() => setIsTransitioning(false), 300); return () => clearTimeout(timer); } }, [isTransitioning]); return (
); }; export default App;