diff --git a/src/pages/members/manage-members/blocks/ListToolBar.tsx b/src/pages/members/manage-members/blocks/ListToolBar.tsx index b17a730..265d15e 100644 --- a/src/pages/members/manage-members/blocks/ListToolBar.tsx +++ b/src/pages/members/manage-members/blocks/ListToolBar.tsx @@ -3,6 +3,7 @@ import { UserPlus } from 'lucide-react'; import { KeenIcon, useDataGrid } from '@/components'; import { DefaultTooltip } from '@/components'; import { useState } from 'react'; +import { toast } from 'sonner'; import { Select, SelectContent, @@ -10,6 +11,9 @@ import { SelectTrigger, SelectValue } from '@/components/ui/select'; +import { getAuth } from '@/auth'; +import { apiConfig } from '@/config/api.config'; + const API_URL = apiConfig.service_customer; interface ListToolbarProps { createMember: () => void; @@ -19,42 +23,70 @@ interface ListToolbarProps { } const ListToolbar = ({ createMember, onReload, isReloading, groups }: ListToolbarProps) => { - const [groupFilter, setGroupFilter] = useState(''); - const [usernameFilter, setUsernameFilter] = useState(''); - const [msisdnFilter, setMsisdnFilter] = useState(''); - const {table}=useDataGrid(); + const { table, reload } = useDataGrid(); + const [searchValue, setSearchValue] = useState(); + const [typeSearchValue, setSearchTypeValue] = useState(); - const handleUsernameChange = (e: React.ChangeEvent) => { - setUsernameFilter(e.target.value); - table.getColumn('username')?.setFilterValue(e.target.value); - }; - const handleMsisdnChange = (e: React.ChangeEvent) => { - setMsisdnFilter(e.target.value); - table.getColumn('msisdn')?.setFilterValue(e.target.value); + const handleSearch = (e: React.ChangeEvent) => { + setSearchValue(e.target.value) + if (typeSearchValue === 'username') { + table.getColumn('username')?.setFilterValue(e.target.value); + table.getColumn('msisdn')?.setFilterValue(''); + } + if (typeSearchValue === 'msisdn') { + table.getColumn('msisdn')?.setFilterValue(e.target.value); + table.getColumn('username')?.setFilterValue(''); + } + if (groupFilter) table.getColumn('group_name')?.setFilterValue(groupFilter); }; const handleGroupChange = (e: any) => { let value = e.target.value; if (value === '__all__') value = ''; setGroupFilter(value); + if (typeSearchValue === 'username') table.getColumn('username')?.setFilterValue(searchValue); + if (typeSearchValue === 'msisdn') table.getColumn('msisdn')?.setFilterValue(searchValue); table.getColumn('group_name')?.setFilterValue(value); }; + const generateExportFilters = (groupFilter: string, typeSearchValue: any, searchValue: any): { id: string; value: string }[] => { + const filters: { id: string; value: string }[] = []; + if (groupFilter) filters.push({ id: 'group_name', value: groupFilter }); + if (typeSearchValue && searchValue) filters.push({ id: typeSearchValue, value: searchValue }); + return filters; + }; + + const exporDataToExcel = async (filters: { id: string; value: string }[]) => { + try { + const filterParam = encodeURIComponent(JSON.stringify(filters)); + const response = await fetch(`${API_URL}/customer/export-excel?filter=${filterParam}`, { + method: 'GET', + headers: { + Authorization: `Bearer ${getAuth()?.access_token}`, + } + }); + if (!response.ok) throw new Error('Failed to fetch file'); + + const blob = await response.blob(); + const contentDisposition = response.headers.get('content-disposition'); + const currentYear = new Date().getFullYear(); + const filename = `TPAY_members_${currentYear}.xlsx`; + return { blob, filename }; + } catch (error:any) { + console.error('Error exporting data:', error); + toast.error(error) + } + }; + return (
- + - + + + + +
+ diff --git a/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx b/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx index 413b7ef..bfd82a7 100644 --- a/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx +++ b/src/pages/transaction/history-transaction/blocks/ListToolbar.tsx @@ -134,7 +134,6 @@ const ListToolbar = () => { } }; - return (