213 lines
6.8 KiB
TypeScript
213 lines
6.8 KiB
TypeScript
import { useMemo, useState, useEffect } from 'react';
|
|
|
|
import Grid from '@mui/material/Grid';
|
|
import Typography from '@mui/material/Typography';
|
|
|
|
import { DashboardContent } from 'src/layouts/dashboard';
|
|
import { _posts, _tasks, _traffic, _timeline } from 'src/_mock';
|
|
import { fetchFileStatsToday } from 'src/services/file-stats-service';
|
|
|
|
import { AnalyticsNews } from '../analytics-news';
|
|
import { AnalyticsTasks } from '../analytics-tasks';
|
|
import { AnalyticsCurrentVisits } from '../analytics-current-visits';
|
|
import { AnalyticsOrderTimeline } from '../analytics-order-timeline';
|
|
import { AnalyticsWebsiteVisits } from '../analytics-website-visits';
|
|
import { AnalyticsWidgetSummary } from '../analytics-widget-summary';
|
|
import { AnalyticsTrafficBySite } from '../analytics-traffic-by-site';
|
|
import { AnalyticsCurrentSubject } from '../analytics-current-subject';
|
|
import { AnalyticsConversionRates } from '../analytics-conversion-rates';
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
export function OverviewAnalyticsView() {
|
|
const [fileStats, setFileStats] = useState({ filed: 0, edited: 0 });
|
|
const [loadingFiles, setLoadingFiles] = useState(true);
|
|
const visitCategories = useMemo(() => {
|
|
const days = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
|
|
const today = new Date();
|
|
|
|
const labels = Array.from({ length: 7 }, (_, idx) => {
|
|
const d = new Date(today);
|
|
d.setDate(today.getDate() - (6 - idx));
|
|
const dayIdx = d.getDay();
|
|
return days[dayIdx];
|
|
});
|
|
|
|
labels[labels.length - 1] = 'Heute';
|
|
return labels;
|
|
}, []);
|
|
|
|
const baselineFiled = [43, 33, 22, 37, 67, 68];
|
|
const baselineEdited = [51, 70, 47, 67, 40, 37];
|
|
|
|
const visitSeries = [
|
|
{
|
|
name: 'Dateien abgelegt',
|
|
data: [...baselineFiled, fileStats.filed],
|
|
},
|
|
{
|
|
name: 'Dateien bearbeitet',
|
|
data: [...baselineEdited, fileStats.edited],
|
|
},
|
|
];
|
|
|
|
useEffect(() => {
|
|
let active = true;
|
|
|
|
fetchFileStatsToday()
|
|
.then((data) => {
|
|
if (active) setFileStats(data);
|
|
})
|
|
.finally(() => {
|
|
if (active) setLoadingFiles(false);
|
|
});
|
|
|
|
return () => {
|
|
active = false;
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
<DashboardContent maxWidth="xl">
|
|
<Typography variant="h4" sx={{ mb: { xs: 3, md: 5 } }}>
|
|
Hi, Welcome back 👋
|
|
</Typography>
|
|
|
|
<Grid container spacing={3}>
|
|
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
|
<AnalyticsWidgetSummary
|
|
title="Dateien - Heute"
|
|
percent={0}
|
|
total={fileStats.filed + fileStats.edited}
|
|
icon={<img alt="Dateien" src="/assets/icons/glass/ic-glass-bag.svg" />}
|
|
details={[
|
|
{ label: 'Dateien abgelegt', value: fileStats.filed },
|
|
{ label: 'Dateien bearbeitet', value: fileStats.edited },
|
|
]}
|
|
loading={loadingFiles}
|
|
chart={{
|
|
categories: ['Heute'],
|
|
series: [fileStats.filed, fileStats.edited],
|
|
options: { stroke: { width: 2 } },
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
|
<AnalyticsWidgetSummary
|
|
title="New users"
|
|
percent={-0.1}
|
|
total={1352831}
|
|
color="secondary"
|
|
icon={<img alt="New users" src="/assets/icons/glass/ic-glass-users.svg" />}
|
|
chart={{
|
|
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
|
|
series: [56, 47, 40, 62, 73, 30, 23, 54],
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
|
<AnalyticsWidgetSummary
|
|
title="Purchase orders"
|
|
percent={2.8}
|
|
total={1723315}
|
|
color="warning"
|
|
icon={<img alt="Purchase orders" src="/assets/icons/glass/ic-glass-buy.svg" />}
|
|
chart={{
|
|
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
|
|
series: [40, 70, 50, 28, 70, 75, 7, 64],
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, sm: 6, md: 3 }}>
|
|
<AnalyticsWidgetSummary
|
|
title="Messages"
|
|
percent={3.6}
|
|
total={234}
|
|
color="error"
|
|
icon={<img alt="Messages" src="/assets/icons/glass/ic-glass-message.svg" />}
|
|
chart={{
|
|
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug'],
|
|
series: [56, 30, 23, 54, 47, 40, 62, 73],
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 4 }}>
|
|
<AnalyticsCurrentVisits
|
|
title="Current visits"
|
|
chart={{
|
|
series: [
|
|
{ label: 'America', value: 3500 },
|
|
{ label: 'Asia', value: 2500 },
|
|
{ label: 'Europe', value: 1500 },
|
|
{ label: 'Africa', value: 500 },
|
|
],
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 8 }}>
|
|
<AnalyticsWebsiteVisits
|
|
title="Dateien verarbeitet"
|
|
subheader="(+43%) als letzte Woche"
|
|
chart={{
|
|
categories: visitCategories,
|
|
series: visitSeries,
|
|
options: {
|
|
tooltip: { y: { formatter: (value: number) => `${value} Dateien` } },
|
|
},
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 8 }}>
|
|
<AnalyticsConversionRates
|
|
title="Conversion rates"
|
|
subheader="(+43%) than last year"
|
|
chart={{
|
|
categories: ['Italy', 'Japan', 'China', 'Canada', 'France'],
|
|
series: [
|
|
{ name: '2022', data: [44, 55, 41, 64, 22] },
|
|
{ name: '2023', data: [53, 32, 33, 52, 13] },
|
|
],
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 4 }}>
|
|
<AnalyticsCurrentSubject
|
|
title="Current subject"
|
|
chart={{
|
|
categories: ['English', 'History', 'Physics', 'Geography', 'Chinese', 'Math'],
|
|
series: [
|
|
{ name: 'Series 1', data: [80, 50, 30, 40, 100, 20] },
|
|
{ name: 'Series 2', data: [20, 30, 40, 80, 20, 80] },
|
|
{ name: 'Series 3', data: [44, 76, 78, 13, 43, 10] },
|
|
],
|
|
}}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 8 }}>
|
|
<AnalyticsNews title="News" list={_posts.slice(0, 5)} />
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 4 }}>
|
|
<AnalyticsOrderTimeline title="Order timeline" list={_timeline} />
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 4 }}>
|
|
<AnalyticsTrafficBySite title="Traffic by site" list={_traffic} />
|
|
</Grid>
|
|
|
|
<Grid size={{ xs: 12, md: 6, lg: 8 }}>
|
|
<AnalyticsTasks title="Tasks" list={_tasks} />
|
|
</Grid>
|
|
</Grid>
|
|
</DashboardContent>
|
|
);
|
|
}
|