generated from gsoc2/open-sauced
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLimitPicker.tsx
38 lines (32 loc) · 1.1 KB
/
LimitPicker.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { useRouter } from "next/router";
import SingleSelect from "components/atoms/Select/single-select";
export type LimitOptions = 10 | 20 | 30 | 40 | 50;
const limitOptions: { label: string; value: `${LimitOptions}` }[] = [
{ label: "10 per page", value: "10" },
{ label: "20 per page", value: "20" },
{ label: "30 per page", value: "30" },
{ label: "40 per page", value: "40" },
{ label: "50 per page", value: "50" },
];
interface LimitPickerProps {
onLimitChanged?: (value: string) => void;
}
export const LimitPicker = ({ onLimitChanged }: LimitPickerProps) => {
const router = useRouter();
const limit = (Number(router.query.limit) || 10) as LimitOptions;
const onDefaultLimitChanged = (value: string) => {
router.push({ query: { ...router.query, page: 1, limit: value } });
onLimitChanged?.(value);
};
return (
<label className="w-max font-semibold">
<span className="sr-only">Limit:</span>
<SingleSelect
insetLabel="Showing:"
onValueChange={onDefaultLimitChanged}
value={`${limit}`}
options={limitOptions}
/>
</label>
);
};