fixing update customer manage user & sorting

This commit is contained in:
Raja Oktafrianto
2025-04-14 11:57:29 +07:00
parent f23943b53c
commit 5a1a51bf5d
3 changed files with 32 additions and 27 deletions

View File

@ -153,9 +153,9 @@ const EditDialog = () => {
email: response.data.email, email: response.data.email,
id_role: response.data.idRole, id_role: response.data.idRole,
status: response.data.status, status: response.data.status,
customerid: response.data.customerid customerid: response.data.customer.id
})); }));
// console.log('Customer ID dari user detail:', response.data.customerid); // console.log('Customer ID from API:', response?.data.customerid);
} else { } else {
setFormField((prev) => ({ setFormField((prev) => ({
...prev, ...prev,
@ -170,16 +170,6 @@ const EditDialog = () => {
// console.log('Fetched ID Role:', response?.data.id_role); // console.log('Fetched ID Role:', response?.data.id_role);
}, []); }, []);
useEffect(() => {
if (selectedUser) {
doFetchUserData(selectedUser);
}
}, [selectedUser]);
useEffect(() => {
getCustomerList([{ id: 'id', desc: false }]);
}, []);
useEffect(() => { useEffect(() => {
if (showEditDialog === false) { if (showEditDialog === false) {
resetForm(); resetForm();
@ -188,6 +178,7 @@ const EditDialog = () => {
useEffect(() => { useEffect(() => {
const fetchAllData = async () => { const fetchAllData = async () => {
await getCustomerList([{ id: 'id', desc: false }]);
await doFetchUserRole([{ id: 'name', desc: false }]); await doFetchUserRole([{ id: 'name', desc: false }]);
if (selectedUser) { if (selectedUser) {
await doFetchUserData(selectedUser); await doFetchUserData(selectedUser);

View File

@ -15,7 +15,7 @@ const ListToolBar = () => {
<KeenIcon icon="magnifier" /> <KeenIcon icon="magnifier" />
<input <input
type="text" type="text"
placeholder="Search users" placeholder="Search Users"
value={(table.getColumn('username')?.getFilterValue() as string) ?? ''} value={(table.getColumn('username')?.getFilterValue() as string) ?? ''}
onChange={(event) => onChange={(event) =>
table.getColumn('username')?.setFilterValue(event.target.value) table.getColumn('username')?.setFilterValue(event.target.value)

View File

@ -78,7 +78,7 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
const columns = useMemo<ColumnDef<any>[]>( const columns = useMemo<ColumnDef<any>[]>(
() => [ () => [
{ {
accessorFn: (row) => row.username, accessorKey: 'username',
id: 'username', id: 'username',
header: ({ column }) => <DataGridColumnHeader title="Username" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Username" column={column} />,
enableSorting: true, enableSorting: true,
@ -88,27 +88,27 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
accessorFn: (row) => row.customer?.username, accessorFn: (row) => row.customer?.username,
id: 'customer', id: 'customer',
header: ({ column }) => <DataGridColumnHeader title="Customer" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Customer" column={column} />,
enableSorting: false, enableSorting: true,
enableHiding: false, enableHiding: false,
meta: { meta: {
headerClassName: 'w-[300px]' headerClassName: 'w-[300px]'
} }
}, },
{ {
accessorFn: (row) => row.email, accessorKey: 'email',
id: 'email', id: 'email',
header: ({ column }) => <DataGridColumnHeader title="Email" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Email" column={column} />,
enableSorting: false, enableSorting: true,
enableHiding: false, enableHiding: false,
meta: { meta: {
headerClassName: 'w-[350px]' headerClassName: 'w-[350px]'
} }
}, },
{ {
accessorFn: (row) => row.name, accessorKey: 'name',
id: 'name', id: 'name',
header: ({ column }) => <DataGridColumnHeader title="Name" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Name" column={column} />,
enableSorting: false, enableSorting: true,
enableHiding: false, enableHiding: false,
meta: { meta: {
headerClassName: 'w-[250px]' headerClassName: 'w-[250px]'
@ -118,7 +118,7 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
accessorFn: (row) => row.role.name, accessorFn: (row) => row.role.name,
id: 'role_name', id: 'role_name',
header: ({ column }) => <DataGridColumnHeader title="Role Name" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Role Name" column={column} />,
enableSorting: false, enableSorting: true,
enableHiding: false, enableHiding: false,
cell: (data: any) => { cell: (data: any) => {
const { role } = data.row.original; const { role } = data.row.original;
@ -132,7 +132,7 @@ const ManageUserContextProvider = ({ children }: { children: React.ReactNode })
} }
}, },
{ {
accessorFn: (row) => row.status, accessorKey: 'status',
id: 'status', id: 'status',
header: ({ column }) => <DataGridColumnHeader title="Status" column={column} />, header: ({ column }) => <DataGridColumnHeader title="Status" column={column} />,
enableSorting: false, enableSorting: false,
@ -190,18 +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) => {
let key = curr.id;
// mapping kolom ke nama kolom lengkap (agar tidak ambigu di backend)
if (key === 'username') key = 'Users.username';
if (key === 'customer') key = 'Customers.username';
if (key === 'role_name') key = 'Roles.name';
if (key === 'email') key = 'Users.email';
if (key === 'name') key = 'Users.name';
acc[key] = curr.value.toLowerCase();
return acc;
}, {});
sorting = sorting.length == 0 ? [{ id: 'Users.username', desc: false }] : sorting; sorting = sorting.length == 0 ? [{ id: 'Users.username', desc: false }] : sorting;
filter = filter.length == 0 ? {} : { any: filter[0].value.toLowerCase() }; filter = Object.keys(mappedFilter).length === 0 ? {} : mappedFilter;
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: sorting[0].id,
order_direction: sorting[0].desc == false ? 'ASC' : 'DESC', order_direction: sorting[0].desc === false ? 'DESC' : 'ASC',
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 };
}; };
@ -228,9 +241,10 @@ 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 }) => {
doGetListData(pageIndex, pageSize, sorting, columnFilters) // console.log('FILTER SENT:', columnFilters);
} return doGetListData(pageIndex, pageSize, sorting, columnFilters);
}}
> >
{children} {children}
</DataGridProvider> </DataGridProvider>