|
| 1 | +import { useCallback, useState } from "react"; |
| 2 | + |
1 | 3 | import { SearchInput } from "@components/ui/SearchInput"; |
2 | 4 | import { Button } from "primereact/button"; |
3 | 5 | import { Column } from "primereact/column"; |
4 | 6 | import { confirmDialog, ConfirmDialog } from "primereact/confirmdialog"; |
5 | | -import { DataTable } from "primereact/datatable"; |
| 7 | +import { DataTable, DataTableSortEvent } from "primereact/datatable"; |
6 | 8 | import { InputSwitch } from "primereact/inputswitch"; |
7 | 9 | import { classNames } from "primereact/utils"; |
8 | 10 |
|
@@ -42,6 +44,28 @@ export const AssignmentList = ({ |
42 | 44 | onVisibilityChange, |
43 | 45 | onRemove |
44 | 46 | }: AssignmentListProps) => { |
| 47 | + const SORT_STORAGE_KEY = "assignmentList_sortField"; |
| 48 | + const ORDER_STORAGE_KEY = "assignmentList_sortOrder"; |
| 49 | + |
| 50 | + const [sortField, setSortField] = useState<string>(() => { |
| 51 | + return localStorage.getItem(SORT_STORAGE_KEY) || "name"; |
| 52 | + }); |
| 53 | + const [sortOrder, setSortOrder] = useState<1 | -1 | 0>(() => { |
| 54 | + const stored = localStorage.getItem(ORDER_STORAGE_KEY); |
| 55 | + |
| 56 | + return stored ? (Number(stored) as 1 | -1) : 1; |
| 57 | + }); |
| 58 | + |
| 59 | + const handleSort = useCallback((e: DataTableSortEvent) => { |
| 60 | + const field = (e.sortField as string) || "name"; |
| 61 | + const order = e.sortOrder as 1 | -1; |
| 62 | + |
| 63 | + setSortField(field); |
| 64 | + setSortOrder(order); |
| 65 | + localStorage.setItem(SORT_STORAGE_KEY, field); |
| 66 | + localStorage.setItem(ORDER_STORAGE_KEY, String(order)); |
| 67 | + }, []); |
| 68 | + |
45 | 69 | const visibilityBodyTemplate = (rowData: Assignment) => ( |
46 | 70 | <VisibilityDropdown assignment={rowData} onChange={onVisibilityChange} /> |
47 | 71 | ); |
@@ -233,8 +257,9 @@ export const AssignmentList = ({ |
233 | 257 | name: { value: globalFilter, matchMode: "contains" } |
234 | 258 | }} |
235 | 259 | sortMode="single" |
236 | | - sortField="name" |
237 | | - sortOrder={1} |
| 260 | + sortField={sortField} |
| 261 | + sortOrder={sortOrder} |
| 262 | + onSort={handleSort} |
238 | 263 | > |
239 | 264 | <Column |
240 | 265 | field="name" |
|
0 commit comments