fixing search & sorting manage user

This commit is contained in:
Raja Oktafrianto
2025-04-14 17:38:43 +07:00
parent ab7a8bab9e
commit a7223379d8

View File

@ -95,7 +95,7 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
} }
}, },
{ {
accessorKey: 'email', accessorFn: (row) => row.email,
id: 'email', id: 'email',
header: ({ column }) => <DataGridColumnHeader title="Email" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Email" column={column} />,
enableSorting: true, enableSorting: true,
@ -105,7 +105,7 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
} }
}, },
{ {
accessorKey: 'name', accessorFn: (row) => row.name,
id: 'name', id: 'name',
header: ({ column }) => <DataGridColumnHeader title="Name" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Name" column={column} />,
enableSorting: true, enableSorting: true,
@ -132,7 +132,7 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
} }
}, },
{ {
accessorKey: 'status', accessorFn: (row) => row.status,
id: 'status', id: 'status',
header: ({ column }) => <DataGridColumnHeader title="Status" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Status" column={column} />,
enableSorting: false, enableSorting: false,
@ -190,31 +190,31 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
); );
const doGetListData = async (page: number, limit: number, sorting: any, filter: any) => { const doGetListData = async (page: number, limit: number, sorting: any, filter: any) => {
const mappedFilter = filter.reduce((acc: any, curr: any) => { const USER_TABLE_COLUMNS = ['username', 'email', 'name', 'status'];
let key = curr.id;
// mapping kolom ke nama kolom lengkap (agar tidak ambigu di backend) // Tambahkan prefix ke field dari tabel Users
if (key === 'username') key = 'Users.username'; const mappedSorting = sorting.map((sort: any) => ({
if (key === 'customer') key = 'Customers.username'; ...sort,
if (key === 'role_name') key = 'Roles.name'; id: USER_TABLE_COLUMNS.includes(sort.id) ? `Users.${sort.id}` : sort.id
if (key === 'email') key = 'Users.email'; }));
if (key === 'name') key = 'Users.name';
acc[key] = curr.value.toLowerCase(); const orderField = mappedSorting[0]?.id ?? 'Users.username';
return acc; const orderDirection = mappedSorting[0]?.desc === false ? 'DESC' : 'ASC';
}, {});
sorting = sorting.length == 0 ? [{ id: 'Users.username', desc: false }] : sorting; filter =
filter = Object.keys(mappedFilter).length === 0 ? {} : mappedFilter; filter.length == 0
? {}
: { 'Users.username': { like: `%${filter[0].value?.toLowerCase()}%` } };
const response = await GetData(`${API_URL}/user/list`, { const response = await GetData(`${API_URL}/user/list`, {
limit: limit, limit: limit,
page: page + 1, page: page + 1,
with_deleted: false, with_deleted: false,
order_field: sorting[0].id, order_field: orderField,
order_direction: sorting[0].desc === false ? 'DESC' : 'ASC', order_direction: orderDirection,
filter: JSON.stringify(filter) filter: JSON.stringify(filter)
}); });
// console.log('response api:', response); // console.log('response api:', response);
return { data: response?.data.list, totalCount: response?.data.total_count }; return { data: response?.data.list, totalCount: response?.data.total_count };
}; };
@ -241,10 +241,9 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
layout={{ card: true }} layout={{ card: true }}
sorting={[{ id: 'Users.username', desc: false }]} sorting={[{ id: 'Users.username', desc: false }]}
serverSide={true} serverSide={true}
onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) => { onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) =>
// console.log('FILTER SENT:', columnFilters); doGetListData(pageIndex, pageSize, sorting, columnFilters)
return doGetListData(pageIndex, pageSize, sorting, columnFilters); }
}}
> >
{children} {children}
</DataGridProvider> </DataGridProvider>