chore(FE-43): add address and area sorting

This commit is contained in:
ValdiANS
2025-10-05 12:32:51 +07:00
parent 05a67bdc75
commit 508a530c3a
@@ -1,8 +1,13 @@
'use client'; 'use client';
import { ChangeEventHandler, useEffect, useState } from 'react'; import { ChangeEventHandler, useCallback, useEffect, useState } from 'react';
import useSWR from 'swr'; import useSWR from 'swr';
import { CellContext, ColumnDef, SortingState } from '@tanstack/react-table'; import {
CellContext,
ColumnDef,
ColumnSort,
SortingState,
} from '@tanstack/react-table';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { Icon } from '@iconify/react'; import { Icon } from '@iconify/react';
@@ -88,8 +93,14 @@ const LocationsTable = () => {
setPageSize, setPageSize,
toQueryString: getTableFilterQueryString, toQueryString: getTableFilterQueryString,
} = useTableFilter({ } = useTableFilter({
initial: { search: '', nameSort: '' }, initial: { search: '', nameSort: '', addressSort: '', areaSort: '' },
paramMap: { page: 'page', pageSize: 'limit', nameSort: 'sort_name' }, paramMap: {
page: 'page',
pageSize: 'limit',
nameSort: 'sort_name',
addressSort: 'sort_address',
areaSort: ' sort_area',
},
}); });
const { const {
@@ -194,15 +205,36 @@ const LocationsTable = () => {
setPageSize(newVal.value as number); setPageSize(newVal.value as number);
}; };
const updateSortingFilter = useCallback(
(
sortName: Exclude<keyof typeof tableFilterState, 'page' | 'pageSize'>,
sortFilter: ColumnSort | undefined
) => {
if (!sortFilter) {
updateFilter(sortName, '');
} else {
updateFilter(sortName, sortFilter.desc ? 'desc' : 'asc');
}
},
[updateFilter]
);
console.log({
sorting,
getTableFilterQueryString: getTableFilterQueryString(),
});
// track sorting // track sorting
useEffect(() => { useEffect(() => {
const isNameSorted = sorting.find((sortItem) => sortItem.id === 'name'); const nameSortFilter = sorting.find((sortItem) => sortItem.id === 'name');
const addressSortFilter = sorting.find(
(sortItem) => sortItem.id === 'address'
);
const areaSortFilter = sorting.find((sortItem) => sortItem.id === 'area');
if (!isNameSorted) { updateSortingFilter('nameSort', nameSortFilter);
updateFilter('nameSort', ''); updateSortingFilter('addressSort', addressSortFilter);
} else { updateSortingFilter('areaSort', areaSortFilter);
updateFilter('nameSort', isNameSorted.desc ? 'desc' : 'asc');
}
}, [sorting]); }, [sorting]);
return ( return (