fixing search & sorting manage user
This commit is contained in:
@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user