|
1 | 1 | import useTranslation from "next-translate/useTranslation"; |
2 | 2 | import { useRouter } from "next/router"; |
| 3 | +import { useEffect, useMemo, useState } from "react"; |
3 | 4 | import Loader from "react-spinners/ClipLoader"; |
4 | | -import { useState, useMemo, useEffect } from "react"; |
5 | 5 |
|
| 6 | +import { toast } from "@/shadcn/hooks/use-toast"; |
| 7 | +import { cn } from "@/shadcn/lib/utils"; |
| 8 | +import { Button } from "@/shadcn/ui/button"; |
| 9 | +import { |
| 10 | + Command, |
| 11 | + CommandEmpty, |
| 12 | + CommandGroup, |
| 13 | + CommandInput, |
| 14 | + CommandItem, |
| 15 | + CommandList, |
| 16 | + CommandSeparator, |
| 17 | +} from "@/shadcn/ui/command"; |
6 | 18 | import { |
7 | 19 | ContextMenu, |
8 | 20 | ContextMenuContent, |
9 | 21 | ContextMenuItem, |
10 | 22 | ContextMenuSeparator, |
11 | | - ContextMenuTrigger, |
12 | 23 | ContextMenuSub, |
13 | | - ContextMenuSubTrigger, |
14 | 24 | ContextMenuSubContent, |
| 25 | + ContextMenuSubTrigger, |
| 26 | + ContextMenuTrigger, |
15 | 27 | } from "@/shadcn/ui/context-menu"; |
| 28 | +import { Popover, PopoverContent, PopoverTrigger } from "@/shadcn/ui/popover"; |
16 | 29 | import { getCookie } from "cookies-next"; |
| 30 | +import { CheckIcon, Filter, X } from "lucide-react"; |
17 | 31 | import moment from "moment"; |
18 | 32 | import Link from "next/link"; |
19 | 33 | import { useQuery } from "react-query"; |
20 | 34 | import { useUser } from "../../store/session"; |
21 | | -import { Popover, PopoverContent, PopoverTrigger } from "@/shadcn/ui/popover"; |
22 | | -import { CheckIcon, Filter, X } from "lucide-react"; |
23 | | -import { Button } from "@/shadcn/ui/button"; |
24 | | -import { |
25 | | - Command, |
26 | | - CommandEmpty, |
27 | | - CommandGroup, |
28 | | - CommandInput, |
29 | | - CommandItem, |
30 | | - CommandList, |
31 | | - CommandSeparator, |
32 | | -} from "@/shadcn/ui/command"; |
33 | | -import { cn } from "@/shadcn/lib/utils"; |
34 | | -import { toast } from "@/shadcn/hooks/use-toast"; |
35 | 35 |
|
36 | 36 | async function getUserTickets(token: any) { |
37 | 37 | const res = await fetch(`/api/v1/tickets/completed`, { |
@@ -83,11 +83,32 @@ export default function Tickets() { |
83 | 83 | const normal = "bg-green-100 text-green-800"; |
84 | 84 |
|
85 | 85 | const [filterSelected, setFilterSelected] = useState(); |
86 | | - const [selectedPriorities, setSelectedPriorities] = useState<string[]>([]); |
87 | | - const [selectedStatuses, setSelectedStatuses] = useState<string[]>([]); |
88 | | - const [selectedAssignees, setSelectedAssignees] = useState<string[]>([]); |
| 86 | + const [selectedPriorities, setSelectedPriorities] = useState<string[]>(() => { |
| 87 | + const saved = localStorage.getItem('closed_selectedPriorities'); |
| 88 | + return saved ? JSON.parse(saved) : []; |
| 89 | + }); |
| 90 | + const [selectedStatuses, setSelectedStatuses] = useState<string[]>(() => { |
| 91 | + const saved = localStorage.getItem('closed_selectedStatuses'); |
| 92 | + return saved ? JSON.parse(saved) : []; |
| 93 | + }); |
| 94 | + const [selectedAssignees, setSelectedAssignees] = useState<string[]>(() => { |
| 95 | + const saved = localStorage.getItem('closed_selectedAssignees'); |
| 96 | + return saved ? JSON.parse(saved) : []; |
| 97 | + }); |
89 | 98 | const [users, setUsers] = useState<any[]>([]); |
90 | 99 |
|
| 100 | + useEffect(() => { |
| 101 | + localStorage.setItem('closed_selectedPriorities', JSON.stringify(selectedPriorities)); |
| 102 | + }, [selectedPriorities]); |
| 103 | + |
| 104 | + useEffect(() => { |
| 105 | + localStorage.setItem('closed_selectedStatuses', JSON.stringify(selectedStatuses)); |
| 106 | + }, [selectedStatuses]); |
| 107 | + |
| 108 | + useEffect(() => { |
| 109 | + localStorage.setItem('closed_selectedAssignees', JSON.stringify(selectedAssignees)); |
| 110 | + }, [selectedAssignees]); |
| 111 | + |
91 | 112 | const handlePriorityToggle = (priority: string) => { |
92 | 113 | setSelectedPriorities((prev) => |
93 | 114 | prev.includes(priority) |
|
0 commit comments