-
Notifications
You must be signed in to change notification settings - Fork 93
/
IssueStatusFilter.tsx
47 lines (41 loc) · 1.29 KB
/
IssueStatusFilter.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
39
40
41
42
43
44
45
46
47
'use client';
import { Status } from '@prisma/client';
import { Select } from '@radix-ui/themes';
import { useRouter, useSearchParams } from 'next/navigation';
import React from 'react';
const statuses: { label: string; value?: Status }[] = [
{ label: 'All' },
{ label: 'Open', value: 'OPEN' },
{ label: 'In Progress', value: 'IN_PROGRESS' },
{ label: 'Closed', value: 'CLOSED' },
];
const IssueStatusFilter = () => {
const router = useRouter();
const searchParams = useSearchParams();
return (
<Select.Root
defaultValue={searchParams.get('status') || ''}
onValueChange={(status) => {
const params = new URLSearchParams();
if (status) params.append('status', status);
if (searchParams.get('orderBy'))
params.append('orderBy', searchParams.get('orderBy')!);
const query = params.size ? '?' + params.toString() : '';
router.push('/issues/list' + query);
}}
>
<Select.Trigger placeholder="Filter by status..." />
<Select.Content>
{statuses.map((status) => (
<Select.Item
key={status.value}
value={status.value || ''}
>
{status.label}
</Select.Item>
))}
</Select.Content>
</Select.Root>
);
};
export default IssueStatusFilter;