Skip to content

Commit 70ff1e5

Browse files
committed
issue-1145 Implement sorting functionality in AssignmentList with localStorage persistence
1 parent 5815b22 commit 70ff1e5

1 file changed

Lines changed: 28 additions & 3 deletions

File tree

  • bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/list

bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/list/AssignmentList.tsx

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import { useCallback, useState } from "react";
2+
13
import { SearchInput } from "@components/ui/SearchInput";
24
import { Button } from "primereact/button";
35
import { Column } from "primereact/column";
46
import { confirmDialog, ConfirmDialog } from "primereact/confirmdialog";
5-
import { DataTable } from "primereact/datatable";
7+
import { DataTable, DataTableSortEvent } from "primereact/datatable";
68
import { InputSwitch } from "primereact/inputswitch";
79
import { classNames } from "primereact/utils";
810

@@ -42,6 +44,28 @@ export const AssignmentList = ({
4244
onVisibilityChange,
4345
onRemove
4446
}: 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+
4569
const visibilityBodyTemplate = (rowData: Assignment) => (
4670
<VisibilityDropdown assignment={rowData} onChange={onVisibilityChange} />
4771
);
@@ -233,8 +257,9 @@ export const AssignmentList = ({
233257
name: { value: globalFilter, matchMode: "contains" }
234258
}}
235259
sortMode="single"
236-
sortField="name"
237-
sortOrder={1}
260+
sortField={sortField}
261+
sortOrder={sortOrder}
262+
onSort={handleSort}
238263
>
239264
<Column
240265
field="name"

0 commit comments

Comments
 (0)