Files
sign/apps/remix/app/components/general/period-selector.tsx

71 lines
1.9 KiB
TypeScript
Raw Normal View History

2023-06-09 18:21:18 +10:00
import { useMemo } from 'react';
2025-01-02 15:33:37 +11:00
import { Trans } from '@lingui/react/macro';
import { useLocation, useNavigate, useSearchParams } from 'react-router';
2024-08-27 20:34:39 +09:00
2025-01-02 15:33:37 +11:00
import type { PeriodSelectorValue } from '@documenso/lib/server-only/document/find-documents';
2023-06-09 18:21:18 +10:00
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from '@documenso/ui/primitives/select';
2025-01-02 15:33:37 +11:00
const isPeriodSelectorValue = (value: unknown): value is PeriodSelectorValue => {
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
return ['', '7d', '14d', '30d'].includes(value as string);
};
2023-06-09 18:21:18 +10:00
export const PeriodSelector = () => {
2025-01-02 15:33:37 +11:00
const { pathname } = useLocation();
const [searchParams] = useSearchParams();
2023-06-09 18:21:18 +10:00
2025-01-02 15:33:37 +11:00
const navigate = useNavigate();
2023-06-09 18:21:18 +10:00
const period = useMemo(() => {
const p = searchParams?.get('period') ?? 'all';
2023-06-09 18:21:18 +10:00
return isPeriodSelectorValue(p) ? p : 'all';
2023-06-09 18:21:18 +10:00
}, [searchParams]);
const onPeriodChange = (newPeriod: string) => {
if (!pathname) {
return;
}
const params = new URLSearchParams(searchParams?.toString());
params.set('period', newPeriod);
if (newPeriod === '' || newPeriod === 'all') {
2023-06-09 18:21:18 +10:00
params.delete('period');
}
2025-01-02 15:33:37 +11:00
void navigate(`${pathname}?${params.toString()}`, { preventScrollReset: true });
2023-06-09 18:21:18 +10:00
};
return (
<Select defaultValue={period} onValueChange={onPeriodChange}>
2023-09-20 02:18:35 +00:00
<SelectTrigger className="text-muted-foreground max-w-[200px]">
2023-06-09 18:21:18 +10:00
<SelectValue />
</SelectTrigger>
<SelectContent position="popper">
2024-08-27 20:34:39 +09:00
<SelectItem value="all">
<Trans>All Time</Trans>
</SelectItem>
<SelectItem value="7d">
<Trans>Last 7 days</Trans>
</SelectItem>
<SelectItem value="14d">
<Trans>Last 14 days</Trans>
</SelectItem>
<SelectItem value="30d">
<Trans>Last 30 days</Trans>
</SelectItem>
2023-06-09 18:21:18 +10:00
</SelectContent>
</Select>
);
};