update column on table Manage Menus

- fix filter searching menus
- synx with response filter searching
This commit is contained in:
Wikzyy
2025-04-14 14:00:33 +07:00
parent 3bbea4bff7
commit 1a88492759

View File

@ -109,7 +109,7 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
meta: { headerClassName: 'w-[200px]' } meta: { headerClassName: 'w-[200px]' }
}, },
{ {
accessorFn: (row) => row.parentName, accessorFn: (row) => row.parentName || row.module,
id: 'menu', id: 'menu',
header: ({ column }) => <DataGridColumnHeader title="Menu" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Menu" column={column} />,
enableSorting: false, enableSorting: false,
@ -234,30 +234,38 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
const getMenusLists = async (page: number, limit: number, sorting: any, filter: any) => { const getMenusLists = async (page: number, limit: number, sorting: any, filter: any) => {
try { try {
sorting = sorting.length === 0 ? [{ id: 'name', desc: false }] : sorting; sorting = sorting.length === 0 ? [{ id: 'name', desc: false }] : sorting;
filter = filter.length === 0 ? {} : { any: filter[0].value?.toLowerCase() }; filter = filter.length === 0 ? {} : { name: { like: `%${filter[0].value?.toLowerCase()}%` } };
const response = await GetData(`${API_URL}/menus/list`, { const query: any = {
limit, limit,
page: 1, page: 1,
with_deleted: false, with_deleted: false,
order_field: sorting[0].id, order_field: sorting[0].id,
order_direction: sorting[0].desc ? 'DESC' : 'ASC', order_direction: sorting[0].desc ? 'DESC' : 'ASC'
filter: JSON.stringify(filter) };
});
if (!response?.data.list) return { data: [], totalCount: 0 }; if (filter && Object.keys(filter).length > 0) {
query.filter = JSON.stringify(filter);
query.page = page + 1;
}
const transformedData = response.data.list.flatMap((row: any, parentIdx: number) => const response = await GetData(`${API_URL}/menus/list`, query);
flattenChildren(row, parentIdx)
);
const total_count = transformedData.length; if (query.filter && query.filter.length > 0) {
return { data: response?.data.list, totalCount: response?.data.total_count };
} else {
const transformedData = response?.data.list.flatMap((row: any, parentIdx: number) =>
flattenChildren(row, parentIdx)
);
// **Pagination di frontend saja (tanpa hit API ulang)** const total_count = transformedData.length;
const paginatedData = transformedData.slice(page * limit, (page + 1) * limit);
const totalPages = Math.ceil(total_count / limit);
return { data: paginatedData, totalCount: total_count }; // **Pagination di frontend saja (tanpa hit API ulang)**
const paginatedData = transformedData.slice(page * limit, (page + 1) * limit);
const totalPages = Math.ceil(total_count / limit);
return { data: paginatedData, totalCount: total_count };
}
} catch (error) { } catch (error) {
console.error('Error fetching Menus', error); console.error('Error fetching Menus', error);
return { data: [], totalCount: 0 }; return { data: [], totalCount: 0 };
@ -287,7 +295,7 @@ const ManageMenusContextProvider = ({ children }: { children: React.ReactNode })
pagination={{ size: 25 }} pagination={{ size: 25 }}
toolbar={<ListToolbar />} toolbar={<ListToolbar />}
layout={{ card: true }} layout={{ card: true }}
sorting={[{ id: 'id', desc: false }]} sorting={[{ id: 'created_at', desc: true }]}
serverSide={true} serverSide={true}
onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) => onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) =>
getMenusLists(pageIndex, pageSize, sorting, columnFilters) getMenusLists(pageIndex, pageSize, sorting, columnFilters)