diff --git a/src/pages/master/walletRule/blocks/ListToolbar.tsx b/src/pages/master/walletRule/blocks/ListToolbar.tsx index b607532..7f338be 100644 --- a/src/pages/master/walletRule/blocks/ListToolbar.tsx +++ b/src/pages/master/walletRule/blocks/ListToolbar.tsx @@ -1,37 +1,149 @@ import { DefaultTooltip, KeenIcon, useDataGrid } from '@/components'; import { Button } from '@/components/ui/button'; import { useManageWalletRuleContext } from '../hooks/useManageWalletRuleContext'; +import { useCallApi } from '@/hooks'; +import { apiConfig } from '@/config/api.config'; +import { useEffect, useState } from 'react'; +import { toast } from 'sonner'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue +} from '@/components/ui/select'; + +const API_URL_WALLET = apiConfig.service_master_data; +const API_URL_GROUP = apiConfig.service_customer; const ListToolbar = () => { const { table, reload } = useDataGrid(); + const { GetData } = useCallApi(); const { handleAddDialog } = useManageWalletRuleContext(); + const [wallets, setWallets] = useState([]); + const [groups, setGroups] = useState([]); + const [walletFilter, setWalletFilter] = useState(''); + const [groupFilter, setGroupFilter] = useState(''); + + const handleClearFilter = () => { + setWalletFilter(''); + setGroupFilter(''); + table.getColumn('wallet_name')?.setFilterValue(undefined); + table.getColumn('group_name')?.setFilterValue(undefined); + }; + + useEffect(() => { + const fetchWallets = async (sorting: any) => { + try { + const response = await GetData(`${API_URL_WALLET}/wallet/list`, { + limit: 25, + page: 1, + with_deleted: false, + order_field: sorting[0].id, + order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' + }); + setWallets(response?.data.list.map((item: any) => ({ id: item.id, name: item.name }))); + } catch (error) { + toast.error('Failed to get Wallets'); + } + }; + + const fetchGroups = async (sorting: any) => { + try { + const response = await GetData(`${API_URL_GROUP}/groups/list`, { + limit: 25, + page: 1, + with_deleted: false, + order_field: sorting[0].id, + order_direction: sorting[0].desc == false ? 'ASC' : 'DESC' + }); + setGroups(response?.data.list.map((item: any) => ({ id: item.id, name: item.name }))); + } catch (error) { + toast.error('Failed to get Groups'); + } + }; + + fetchWallets([{ id: 'wallets.name', desc: false }]); + fetchGroups([{ id: 'name', desc: false }]); + }, []); + + useEffect(() => { + const filters: Record = {}; + + if (walletFilter) { + filters['id_wallet'] = walletFilter; + } + + if (groupFilter) { + filters['id_group'] = groupFilter; + } + + table.setColumnFilters([ + { + id: 'custom', + value: JSON.stringify(filters) + } + ]); + }, [walletFilter, groupFilter]); + + // console.log(wallets); return (
-
- {/* */} - {/* - - */} + {/* Left Side: Filters */} +
+ {/* Wallet Filter */} +
+ + +
+ + {/* Group Filter */} +
+ + +
+ + {/* Reset Filter Button */} +
+ + + + +
+ + {/* Right Side: Action Buttons */}
- + diff --git a/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx b/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx index fe6232a..7f3d6b4 100644 --- a/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx +++ b/src/pages/master/walletRule/hooks/ManageWalletRuleContext.tsx @@ -205,14 +205,22 @@ const ManageWalletRuleContextProvider = ({ children }: { children: React.ReactNo const getWalletRuleLists = async (page: number, limit: number, sorting: any, filter: any) => { try { sorting = sorting.length == 0 ? [{ id: 'name', desc: false }] : sorting; - filter = filter.length == 0 ? {} : { any: filter[0].value?.toLowerCase() }; + + let filterObject = {}; + + if (filter.length > 0 && filter[0].value) { + const parsedFilter = JSON.parse(filter[0].value); + + filterObject = { ...parsedFilter }; + } + const response = await GetData(`${API_URL_WALLET}/dashboard/wallet_rule`, { limit, page: page + 1, with_deleted: false, order_field: sorting[0].id, order_direction: sorting[0].desc == false ? 'ASC' : 'DESC', - filter: JSON.stringify(filter) + filter: JSON.stringify(filterObject) }); // console.log(response?.data); setWalletRules(response?.data.list);