umami/src/components/pages/dashboard/Dashboard.js

71 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-08-30 22:23:08 +00:00
import { Button, Icon, Icons, Text } from 'react-basics';
import Link from 'next/link';
2022-03-04 03:45:49 +00:00
import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader';
2023-08-30 22:23:08 +00:00
import Pager from 'components/common/Pager';
2023-01-10 07:59:26 +00:00
import WebsiteChartList from 'components/pages/websites/WebsiteChartList';
import DashboardSettingsButton from 'components/pages/dashboard/DashboardSettingsButton';
2023-01-11 22:47:38 +00:00
import DashboardEdit from 'components/pages/dashboard/DashboardEdit';
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
import useApi from 'components/hooks/useApi';
2022-08-04 10:56:30 +00:00
import useDashboard from 'store/dashboard';
import useMessages from 'components/hooks/useMessages';
import useLocale from 'components/hooks/useLocale';
2023-08-30 22:23:08 +00:00
import useApiFilter from 'components/hooks/useApiFilter';
2022-03-04 03:45:49 +00:00
2023-08-10 20:26:33 +00:00
export function Dashboard() {
2023-03-22 21:05:55 +00:00
const { formatMessage, labels, messages } = useMessages();
2023-08-30 22:23:08 +00:00
const { showCharts, editing } = useDashboard();
const { dir } = useLocale();
const { get, useQuery } = useApi();
2023-08-30 22:23:08 +00:00
const { page, handlePageChange } = useApiFilter();
const pageSize = 10;
const {
data: result,
isLoading,
error,
} = useQuery(['websites', page, pageSize], () =>
get('/websites', { includeTeams: 1, page, pageSize }),
2023-07-27 20:20:22 +00:00
);
2023-08-30 22:23:08 +00:00
const { data, count } = result || {};
const hasData = data && data?.length !== 0;
2022-03-04 03:45:49 +00:00
return (
<Page loading={isLoading} error={error}>
<PageHeader title={formatMessage(labels.dashboard)}>
{!editing && hasData && <DashboardSettingsButton />}
2022-03-04 03:45:49 +00:00
</PageHeader>
{!hasData && (
2023-04-10 03:22:28 +00:00
<EmptyPlaceholder message={formatMessage(messages.noWebsitesConfigured)}>
<Link href="/settings/websites">
<Button>
2023-04-20 09:41:06 +00:00
<Icon rotate={dir === 'rtl' ? 180 : 0}>
<Icons.ArrowRight />
</Icon>
<Text>{formatMessage(messages.goToSettings)}</Text>
</Button>
</Link>
</EmptyPlaceholder>
)}
{hasData && (
<>
2023-08-30 22:23:08 +00:00
{editing && <DashboardEdit />}
2023-08-10 20:26:33 +00:00
{!editing && (
2023-08-30 22:23:08 +00:00
<>
<WebsiteChartList websites={data} showCharts={showCharts} limit={pageSize} />
<Pager
page={page}
pageSize={pageSize}
count={count}
onPageChange={handlePageChange}
/>
</>
)}
</>
2022-03-04 03:45:49 +00:00
)}
</Page>
);
}
2023-04-21 15:00:42 +00:00
export default Dashboard;