import { IconFile, IconMessage, IconUser, IconUserGroup } from 'tushan/icon'; import React from 'react'; import { XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, AreaChart, Area, } from 'tushan/chart'; import { Card, Link, Space, Grid, Divider, Typography, useUserStore, createSelector, useTranslation, useGetList, useAsync, } from 'tushan'; import { request } from '../request'; const { GridItem } = Grid; export const Dashboard: React.FC = React.memo(() => { const { userIdentity } = useUserStore(createSelector('userIdentity')); const { t } = useTranslation(); return (
{t('tushan.dashboard.welcome', { name: userIdentity.fullName, })} {t('custom.dashboard.newUserCount')} {t('custom.dashboard.messageCount')} {t('tushan.dashboard.tip.docs')} {t('custom.dashboard.tip.github')} {t('custom.dashboard.tip.tushan')}
); }); Dashboard.displayName = 'Dashboard'; const DashboardSummary: React.FC = React.memo(() => { const { t } = useTranslation(); const { total: usersNum } = useGetList('users', { pagination: { page: 1, perPage: 1 }, }); const { total: groupNum } = useGetList('groups', { pagination: { page: 1, perPage: 1 }, }); const { total: fileNum } = useGetList('file', { pagination: { page: 1, perPage: 1 }, }); const { total: messagesNum } = useGetList('messages', { pagination: { page: 1, perPage: 1 }, }); return ( } title={t('tushan.dashboard.user')} count={usersNum} /> } title={t('tushan.dashboard.group')} count={groupNum} /> } title={t('custom.dashboard.file')} count={fileNum} /> } title={t('custom.dashboard.messages')} count={messagesNum} /> ); }); DashboardSummary.displayName = 'DashboardSummary'; const DashboardItem: React.FC< React.PropsWithChildren<{ title: string; href?: string; }> > = React.memo((props) => { const { t } = useTranslation(); return ( {t('tushan.dashboard.more')} ) } bordered={false} style={{ overflow: 'hidden' }} > {props.children} ); }); DashboardItem.displayName = 'DashboardItem'; const DataItem: React.FC<{ icon: React.ReactElement; title: string; count: number; }> = React.memo((props) => { return (
{props.icon}
{props.title}
{props.count}
); }); DataItem.displayName = 'DataItem'; const UserCountChart: React.FC = React.memo(() => { const { t } = useTranslation(); const { value: newUserCountSummary } = useAsync(async () => { const { data } = await request.get<{ summary: { count: number; date: string; }[]; }>('/user/count/summary'); return data.summary; }, []); return ( ); }); UserCountChart.displayName = 'UserCountChart'; const MessageCountChart: React.FC = React.memo(() => { const { t } = useTranslation(); const { value: messageCountSummary } = useAsync(async () => { const { data } = await request.get<{ summary: { count: number; date: string; }[]; }>('/message/count/summary'); return data.summary; }, []); return ( ); }); MessageCountChart.displayName = 'MessageCountChart';