umami/components/pages/reports/ReportsPage.js

62 lines
1.7 KiB
JavaScript
Raw Normal View History

2023-08-14 07:21:49 +02:00
import EmptyPlaceholder from 'components/common/EmptyPlaceholder';
2023-06-15 12:27:41 +02:00
import Page from 'components/layout/Page';
import PageHeader from 'components/layout/PageHeader';
import { useMessages, useReports } from 'hooks';
2023-08-14 07:21:49 +02:00
import Link from 'next/link';
2023-08-16 22:56:12 +02:00
import useConfig from 'hooks/useConfig';
import { Button, Icon, Icons, Text } from 'react-basics';
2023-06-15 12:27:41 +02:00
import ReportsTable from './ReportsTable';
export function ReportsPage() {
2023-08-14 07:21:49 +02:00
const { formatMessage, labels, messages } = useMessages();
2023-08-16 22:56:12 +02:00
const { cloudMode } = useConfig();
2023-08-14 07:21:49 +02:00
const {
reports,
error,
isLoading,
deleteReport,
2023-08-14 07:21:49 +02:00
filter,
handleFilterChange,
handlePageChange,
handlePageSizeChange,
} = useReports();
const hasData = (reports && reports?.data.length !== 0) || filter;
2023-06-15 12:27:41 +02:00
return (
<Page loading={isLoading} error={error}>
<PageHeader title={formatMessage(labels.reports)}>
2023-08-16 22:56:12 +02:00
{!cloudMode && (
<Link href="/reports/create">
<Button variant="primary">
<Icon>
<Icons.Plus />
</Icon>
<Text>{formatMessage(labels.createReport)}</Text>
</Button>
</Link>
)}
2023-06-15 12:27:41 +02:00
</PageHeader>
2023-08-14 07:21:49 +02:00
{hasData && (
<ReportsTable
data={reports}
showSearch={true}
showPaging={true}
onFilterChange={handleFilterChange}
onPageChange={handlePageChange}
onPageSizeChange={handlePageSizeChange}
onDelete={deleteReport}
2023-08-14 07:21:49 +02:00
filterValue={filter}
showDomain={true}
/>
)}
{!hasData && (
<EmptyPlaceholder message={formatMessage(messages.noDataAvailable)}></EmptyPlaceholder>
2023-08-14 07:21:49 +02:00
)}
2023-06-15 12:27:41 +02:00
</Page>
);
}
export default ReportsPage;