umami/src/components/metrics/PagesTable.tsx

66 lines
1.6 KiB
TypeScript
Raw Normal View History

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