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';