umami/src/components/metrics/PagesTable.tsx

62 lines
1.5 KiB
TypeScript
Raw Normal View History

2022-04-10 12:51:43 +02:00
import FilterLink from 'components/common/FilterLink';
2023-03-31 14:55:28 +02:00
import FilterButtons from 'components/common/FilterButtons';
2023-12-03 12:07:03 +01:00
import MetricsTable, { MetricsTableProps } from './MetricsTable';
2024-01-29 03:33:40 +01:00
import { useMessages } from 'components/hooks';
import { useNavigation } from 'components/hooks';
2023-04-09 01:31:21 +02:00
import { emptyFilter } from 'lib/filters';
2023-12-03 12:07:03 +01:00
export interface PagesTableProps extends MetricsTableProps {
2023-12-10 11:02:24 +01:00
allowFilter?: boolean;
2023-12-03 12:07:03 +01:00
}
2023-12-13 09:02:54 +01:00
export function PagesTable({ allowFilter, domainName, ...props }: PagesTableProps) {
2023-03-31 14:55:28 +02:00
const {
router,
2023-10-03 18:45:02 +02:00
makeUrl,
query: { view = 'url' },
2023-10-03 18:45:02 +02:00
} = useNavigation();
2023-03-22 22:05:55 +01:00
const { formatMessage, labels } = useMessages();
2020-09-06 02:27:01 +02:00
2023-12-13 09:02:54 +01:00
const handleSelect = (key: any) => {
2023-10-03 18:45:02 +02:00
router.push(makeUrl({ view: key }), { scroll: true });
2023-03-31 14:55:28 +02:00
};
const buttons = [
{
2023-04-09 00:51:49 +02:00
label: 'URL',
2023-03-31 14:55:28 +02:00
key: 'url',
},
{
label: formatMessage(labels.title),
key: 'title',
},
];
const renderLink = ({ x }) => {
2023-12-13 09:02:54 +01:00
return (
<FilterLink
id={view}
value={x}
label={!x && formatMessage(labels.none)}
externalUrl={`${domainName.startsWith('http') ? domainName : `https://${domainName}`}${x}`}
/>
);
2020-09-26 07:31:18 +02:00
};
return (
2023-12-10 11:02:24 +01:00
<MetricsTable
{...props}
2023-12-13 09:02:54 +01:00
domainName={domainName}
2023-12-10 11:02:24 +01:00
title={formatMessage(labels.pages)}
type={view}
metric={formatMessage(labels.views)}
dataFilter={emptyFilter}
renderLabel={renderLink}
>
{allowFilter && <FilterButtons items={buttons} selectedKey={view} onSelect={handleSelect} />}
</MetricsTable>
);
}
2023-04-21 17:00:42 +02:00
export default PagesTable;