import React, { useEffect, useMemo, useState } from 'react'; import { Header } from '../components/Header'; import { MisshaiPage } from '../components/MisshaiPage'; import { Tab, TabItem } from '../components/Tab'; import { SettingPage } from '../components/SettingPage'; import { useTranslation } from 'react-i18next'; import { AccountsPage } from '../components/AccountsPage'; import { useDispatch } from 'react-redux'; import { LOCALSTORAGE_KEY_ACCOUNTS } from '../const'; import { IUser } from '../../common/types/user'; import { setAccounts } from '../store/slices/screen'; import { useGetMetaQuery, useGetSessionQuery } from '../services/session'; import { AdminPage } from '../components/AdminPage'; import { $get } from '../misc/api'; import { NekomimiPage } from '../components/NekomimiPage'; import { Card } from '../components/Card'; import { CurrentUser } from '../components/CurrentUser'; export const IndexSessionPage: React.VFC = () => { const [selectedTab, setSelectedTab] = useState('misshai'); const {t, i18n} = useTranslation(); const dispatch = useDispatch(); const { data: session } = useGetSessionQuery(undefined); const { data: meta } = useGetMetaQuery(undefined); useEffect(() => { const accounts = JSON.parse(localStorage.getItem(LOCALSTORAGE_KEY_ACCOUNTS) || '[]') as string[]; Promise.all(accounts.map(token => $get('session', token))).then(a => dispatch(setAccounts(a as IUser[]))); }, [dispatch]); const items = useMemo(() => { const it: TabItem[] = []; it.push({ label: t('_nav.misshai'), key: 'misshai' }); it.push({ label: t('_nav.accounts'), key: 'accounts' }); it.push({ label: t('_nav.catAdjuster'), key: 'nekomimi', isNew: true }); if (session?.isAdmin) { it.push({ label: 'Admin', key: 'admin' }); } it.push({ label: t('_nav.settings'), key: 'settings' }); return it; }, [i18n.language, session]); const component = useMemo(() => { switch (selectedTab) { case 'misshai': return ; case 'accounts': return ; case 'admin': return ; case 'nekomimi': return ; case 'settings': return ; default: return null; } }, [selectedTab]); return ( <>
{session && meta && meta.currentTokenVersion !== session.tokenVersion && (
{t('shouldUpdateToken')} {t('update')}
)}
{component}
); };