mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2026-03-01 13:16:42 +00:00
41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import type { FC } from 'react';
|
|
import { DropdownItem } from 'reactstrap';
|
|
import { DropdownBtn } from '../../../shlink-frontend-kit/src';
|
|
import type { Settings } from '../../../shlink-web-component/src';
|
|
import { rangeOrIntervalToString } from '../../../shlink-web-component/src/utils/dates/helpers/dateIntervals';
|
|
import type { Defined } from '../types';
|
|
|
|
type DateInterval = Defined<Settings['visits']>['defaultInterval'];
|
|
|
|
export interface DateIntervalSelectorProps {
|
|
active?: DateInterval;
|
|
allText: string;
|
|
onChange: (interval: DateInterval) => void;
|
|
}
|
|
|
|
const INTERVAL_TO_STRING_MAP: Record<Exclude<DateInterval, 'all'>, string> = {
|
|
today: 'Today',
|
|
yesterday: 'Yesterday',
|
|
last7Days: 'Last 7 days',
|
|
last30Days: 'Last 30 days',
|
|
last90Days: 'Last 90 days',
|
|
last180Days: 'Last 180 days',
|
|
last365Days: 'Last 365 days',
|
|
};
|
|
|
|
export const DateIntervalSelector: FC<DateIntervalSelectorProps> = ({ onChange, active, allText }) => (
|
|
<DropdownBtn text={rangeOrIntervalToString(active) ?? allText}>
|
|
<DropdownItem active={active === 'all'} onClick={() => onChange('all')}>
|
|
{allText}
|
|
</DropdownItem>
|
|
<DropdownItem divider />
|
|
{Object.entries(INTERVAL_TO_STRING_MAP).map(
|
|
([interval, name]) => (
|
|
<DropdownItem key={interval} active={active === interval} onClick={() => onChange(interval as DateInterval)}>
|
|
{name}
|
|
</DropdownItem>
|
|
),
|
|
)}
|
|
</DropdownBtn>
|
|
);
|