diff --git a/src/pages/notification/blocks/ListToolbar.tsx b/src/pages/notification/blocks/ListToolbar.tsx index 3aca567..9676676 100644 --- a/src/pages/notification/blocks/ListToolbar.tsx +++ b/src/pages/notification/blocks/ListToolbar.tsx @@ -5,22 +5,23 @@ import { useCallback, useEffect, useState } from 'react'; import { toast } from 'sonner'; import { DateRangePicker } from '@/pages/dashboards/home/blocks'; -const formatDate = (date: Date): string => date.toISOString().split('T')[0]; +const formatDate = (date: Date): string => date.toLocaleDateString('sv-SE'); +const formatDateTime = (date: Date): string => date.toISOString(); +const getLocalDateString = (date: Date): string => { + return date.toLocaleDateString('sv-SE'); +}; const ListToolBar = () => { const { table, reload } = useDataGrid(); const { handleAddDialog } = useManageNotificationContext(); - const [dateRange, setDateRange] = useState({ from: '', to: '' }); + const [dateRange, setDateRange] = useState({ + from: getLocalDateString(new Date()), + to: getLocalDateString(new Date()) + }); const [searchValue, setSearchValue] = useState( (table.getColumn('content')?.getFilterValue() as string) ?? '' ); - useEffect(() => { - const today = new Date(); - const formatted = formatDate(today); - setDateRange({ from: formatted, to: formatted }); - }, []); - useEffect(() => { const timer = setTimeout(() => { table.getColumn('content')?.setFilterValue(searchValue); @@ -31,13 +32,25 @@ const ListToolBar = () => { useEffect(() => { const today = new Date(); - const formatted = formatDate(today); - const initialDateRange = { from: formatted, to: formatted }; + // Set waktu ke awal hari (00:00:00) + const startOfDay = new Date(today); + startOfDay.setHours(0, 0, 0, 0); + // Set waktu ke akhir hari (23:59:59) + const endOfDay = new Date(today); + endOfDay.setHours(23, 59, 59, 999); + + const initialDateRange = { + from: formatDate(startOfDay), // << Gunakan formatDate di sini + to: formatDate(endOfDay) + }; setDateRange(initialDateRange); try { - table.getColumn('created_at')?.setFilterValue(initialDateRange); + table.getColumn('created_at')?.setFilterValue({ + from: formatDateTime(startOfDay), + to: formatDateTime(endOfDay) + }); } catch (error) { toast.error('Error applying initial date filter'); console.error('Initial date filter error:', error); @@ -46,16 +59,28 @@ const ListToolBar = () => { const handleClearAllFilters = () => { const today = new Date(); + + const startOfDay = new Date(today); + startOfDay.setHours(0, 0, 0, 0); + + const endOfDay = new Date(today); + endOfDay.setHours(23, 59, 59, 999); + + // Set ulang filter tanggal dengan waktu const resetDateRange = { - from: formatDate(today), - to: formatDate(today) + from: formatDate(startOfDay), // YYYY-MM-DD untuk input date + to: formatDate(endOfDay) }; setSearchValue(''); setDateRange(resetDateRange); table.getColumn('content')?.setFilterValue(''); - table.getColumn('created_at')?.setFilterValue(resetDateRange); + + table.getColumn('created_at')?.setFilterValue({ + from: formatDateTime(startOfDay), + to: formatDateTime(endOfDay) + }); setTimeout(() => { table.setPageIndex(0); @@ -75,9 +100,24 @@ const ListToolBar = () => { useEffect(() => { const checkNewDay = () => { const now = new Date(); - const formattedNow = formatDate(now); - if (formattedNow !== dateRange.from || formattedNow !== dateRange.to) { - setDateRange({ from: formattedNow, to: formattedNow }); + const currentDate = formatDate(now); // Tetap gunakan formatDate untuk perbandingan tanggal saja + + // Periksa apakah tanggal sekarang berbeda dengan tanggal yang difilter + if (currentDate !== formatDate(new Date(dateRange.from))) { + const startOfDay = new Date(now); + startOfDay.setHours(0, 0, 0, 0); + const endOfDay = new Date(now); + endOfDay.setHours(23, 59, 59, 999); + + setDateRange({ + from: formatDate(startOfDay), // hanya YYYY-MM-DD + to: formatDate(endOfDay) + }); + + table.getColumn('created_at')?.setFilterValue({ + from: formatDateTime(startOfDay), + to: formatDateTime(endOfDay) + }); } }; @@ -95,7 +135,16 @@ const ListToolBar = () => { type="date" placeholder="From" value={dateRange.from} - onChange={(event) => setDateRange({ ...dateRange, from: event.target.value })} + onChange={(e) => { + setDateRange({ ...dateRange, from: e.target.value }); + // Untuk filter, konversi ke Date object dengan waktu awal hari + const date = new Date(e.target.value); + date.setHours(0, 0, 0, 0); + table.getColumn('created_at')?.setFilterValue({ + from: date.toISOString(), + to: new Date(dateRange.to).toISOString() + }); + }} name="from" /> @@ -106,7 +155,16 @@ const ListToolBar = () => { type="date" placeholder="To" value={dateRange.to} - onChange={(event) => setDateRange({ ...dateRange, to: event.target.value })} + onChange={(e) => { + setDateRange({ ...dateRange, to: e.target.value }); + // Untuk filter, konversi ke Date object dengan waktu akhir hari + const date = new Date(e.target.value); + date.setHours(23, 59, 59, 999); + table.getColumn('created_at')?.setFilterValue({ + from: new Date(dateRange.from).toISOString(), + to: date.toISOString() + }); + }} name="to" /> diff --git a/src/pages/settings/user/manage-position/blocks/AddDialog.tsx b/src/pages/settings/user/manage-position/blocks/AddDialog.tsx index a0ea607..da73584 100644 --- a/src/pages/settings/user/manage-position/blocks/AddDialog.tsx +++ b/src/pages/settings/user/manage-position/blocks/AddDialog.tsx @@ -18,6 +18,7 @@ import { useCallApi } from '@/hooks'; import { Checkbox } from '@/components/ui/checkbox'; import { doSaveLogActivity } from '@/actions/GlobalActions'; import { set } from 'date-fns'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; const API_URL = apiConfig.service_dashboard; @@ -61,7 +62,8 @@ const MenuItemComponent: React.FC<{ }; const initialState = { - name: '' + name: '', + status_balance: '', }; const AddDialog = () => { @@ -86,13 +88,15 @@ const AddDialog = () => { const [isSubmitting, setIsSubmitting] = useState(false); const resetForm = () => { - setFormField(() => ({ name: '' })); + setFormField(initialState); setErrors(() => ({})); setSelectMenus([]); }; const validateForm = () => { - const requiredFields = [{ key: 'name', label: 'Position Name' }]; + const requiredFields = [ + { key: 'name', label: 'Position Name' }, + { key: 'status_balance', label: 'Status Balance' }]; const newErrors: Record = {}; let isValid = true; requiredFields.forEach(({ key, label }) => { @@ -128,7 +132,8 @@ const AddDialog = () => { const response = await PostData(`${API_URL}/user_role/create`, { name: formField.name, roles: selectMenus, - status: 'Y' + status: 'Y', + status_balance: formField.status_balance }); if (response?.status) { @@ -203,6 +208,33 @@ const AddDialog = () => { +
+
+ +
+ + {errors.status && ( + {errors.status} + )} +
+
+
{menus.map((menu) => ( diff --git a/src/pages/settings/user/manage-position/blocks/EditDialog.tsx b/src/pages/settings/user/manage-position/blocks/EditDialog.tsx index 0bcc443..88da385 100644 --- a/src/pages/settings/user/manage-position/blocks/EditDialog.tsx +++ b/src/pages/settings/user/manage-position/blocks/EditDialog.tsx @@ -79,11 +79,15 @@ const EditDialog = () => { const [selectMenus, setSelectMenus] = useState([]); const [formField, setFormField] = useState({ name: '', - status: '' + status: '', + status_balance: '' }); const [errors, setErrors] = useState>({}); const validateForm = () => { - const requiredFields = [{ key: 'name', label: 'Position Name' }]; + const requiredFields = [ + { key: 'name', label: 'Position Name' }, + { key: 'status_balance', label: 'Status Balance' } + ]; const newErrors: Record = {}; let isValid = true; requiredFields.forEach(({ key, label }) => { @@ -131,7 +135,8 @@ const EditDialog = () => { const response = await PutData(`${API_URL}/user_role/update/${selectedPosition.id}`, { name: formField.name, roles: selectMenus, - status: formField.status + status: formField.status, + status_balance: formField.status_balance }); if (response?.status) { @@ -163,7 +168,8 @@ const EditDialog = () => { setFormField((prev) => ({ ...prev, name: selectedPosition.name, - status: selectedPosition.status + status: selectedPosition.status, + status_balance: selectedPosition.status_balance })); setSelectMenus(selectedPosition.roles); @@ -236,6 +242,26 @@ const EditDialog = () => {
+
+
+ + +
+ +
+
+
{menus.map((menu) => ( diff --git a/src/pages/settings/user/manage-position/hooks/ManagePositionContext.tsx b/src/pages/settings/user/manage-position/hooks/ManagePositionContext.tsx index 1fa5c30..dc62bdc 100644 --- a/src/pages/settings/user/manage-position/hooks/ManagePositionContext.tsx +++ b/src/pages/settings/user/manage-position/hooks/ManagePositionContext.tsx @@ -23,6 +23,7 @@ interface selectedPosition { name: string; roles: string[]; status: string; + status_balance: string; } const initialProps: ContextProps = { diff --git a/src/pages/wallet/wallet-history/WalletHistory.tsx b/src/pages/wallet/wallet-history/WalletHistory.tsx index d914746..641ba29 100644 --- a/src/pages/wallet/wallet-history/WalletHistory.tsx +++ b/src/pages/wallet/wallet-history/WalletHistory.tsx @@ -7,11 +7,11 @@ const WalletHistory = () => { return ( <> - TPAY | Wallet History + TPAY | Wallet Statement -

Wallet History

+

Wallet Statement

Dashboard @@ -22,7 +22,7 @@ const WalletHistory = () => { - Wallet History + Wallet Statement diff --git a/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx b/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx index 6eb8298..44ccbb8 100644 --- a/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx +++ b/src/pages/wallet/wallet-history/blocks/ListToolbar.tsx @@ -38,7 +38,6 @@ const ListToolbar = () => { const [searchValue, setSearchValue] = useState( (table.getColumn('msisdn')?.getFilterValue() as string) ?? '' ); - const [dateRange, setDateRange] = useState({ from: '', to: '' }); const [walletId, setWalletId] = useState( (table.getColumn('id_wallet')?.getFilterValue() as string) ?? '' ); @@ -48,12 +47,6 @@ const ListToolbar = () => { const [wallets, setWallets] = useState([]); const [groups, setGroups] = useState([]); - useEffect(() => { - const today = new Date(); - const threeMonthsAgo = getOneMonthsAgo(); - setDateRange({ from: formatDate(threeMonthsAgo), to: formatDate(today) }); - }, []); - useEffect(() => { const timer = setTimeout(() => { table.getColumn('msisdn')?.setFilterValue(searchValue); @@ -62,15 +55,6 @@ const ListToolbar = () => { return () => clearTimeout(timer); }, [searchValue, table]); - const handleFilterByDate = useCallback(() => { - try { - table.getColumn('CreatedAt')?.setFilterValue(dateRange); - } catch (error) { - toast.error('Error applying date filter'); - console.error('Error applying date filter:', error); - } - }, [dateRange, table]); - useEffect(() => { table.getColumn('id_wallet')?.setFilterValue(walletId); table.setPageIndex(0); @@ -81,12 +65,6 @@ const ListToolbar = () => { table.setPageIndex(0); }, [groupId, table]); - useEffect(() => { - if (dateRange.from && dateRange.to) { - handleFilterByDate(); - } - }, [dateRange, handleFilterByDate]); - const fetchWallets = async () => { try { const response = await GetData(`${API_URL_WALLET}/dashboard/wallet/`, { @@ -129,23 +107,22 @@ const ListToolbar = () => { from: formatDate(oneMonthAgo), to: formatDate(today) }; - + setSearchValue(''); setWalletId(''); setGroupId(''); - setDateRange(resetDateRange); - + table.getColumn('msisdn')?.setFilterValue(''); table.getColumn('id_wallet')?.setFilterValue(''); table.getColumn('id_group')?.setFilterValue(''); table.getColumn('CreatedAt')?.setFilterValue(resetDateRange); - + setTimeout(() => { table.setPageIndex(0); reload(); }, 0); }; - + const handleRefresh = () => { const today = new Date(); const threeMonthsAgo = getOneMonthsAgo(); @@ -157,7 +134,6 @@ const ListToolbar = () => { setSearchValue(''); setWalletId(''); setGroupId(''); - setDateRange(resetDateRange); table.setColumnFilters([{ id: 'CreatedAt', value: resetDateRange }]); table.setPageIndex(0); @@ -169,24 +145,6 @@ const ListToolbar = () => {
- - - -