From ff6f6136cc666ac1f8e9624e46890642e2ab9340 Mon Sep 17 00:00:00 2001 From: randy-ar Date: Mon, 19 Jan 2026 15:49:31 +0700 Subject: [PATCH] fix(FE): fixing component date input, remove alert native function & remove console.error --- src/components/input/DateInput.tsx | 20 +++++++++++++++++-- .../pages/dashboard/export/DashboardPDF.ts | 1 - .../marketing/pdf/DeliveryOrderExport.tsx | 6 +++--- .../pages/marketing/pdf/SalesOrderExport.tsx | 6 +++--- src/services/api/marketing/marketing.ts | 9 +++------ src/services/api/production/chickin.ts | 3 +-- .../slices/dashboard-filter.slice.ts | 2 -- 7 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/components/input/DateInput.tsx b/src/components/input/DateInput.tsx index 2d55fe6d..a424d723 100644 --- a/src/components/input/DateInput.tsx +++ b/src/components/input/DateInput.tsx @@ -113,7 +113,15 @@ const DateInput = ({ }; const handleSelectSingle = (selectedDate?: Date) => { - if (!selectedDate) return; + if (!selectedDate) { + setSelected(undefined); + setDisplayValue(''); + const syntheticEvent = { + target: { name, value: '' }, + } as unknown as React.ChangeEvent; + onChange?.(syntheticEvent); + return; + } if (minDate && selectedDate < minDate) { setInternalError(`Tanggal tidak boleh sebelum ${min}`); return; @@ -136,7 +144,15 @@ const DateInput = ({ }; const handleSelectRange = (range?: { from?: Date; to?: Date }) => { - if (!range) return; + if (!range) { + setSelectedRange({}); + setDisplayValue(''); + const syntheticEvent = { + target: { name, value: { from: '', to: '' } }, + } as unknown as React.ChangeEvent; + onChange?.(syntheticEvent); + return; + } setSelectedRange(range); const fromStr = range.from ? formatDate(range.from, 'DD/MM/YYYY') : ''; diff --git a/src/components/pages/dashboard/export/DashboardPDF.ts b/src/components/pages/dashboard/export/DashboardPDF.ts index dfb1a766..17c5bde4 100644 --- a/src/components/pages/dashboard/export/DashboardPDF.ts +++ b/src/components/pages/dashboard/export/DashboardPDF.ts @@ -253,7 +253,6 @@ export const generateDashboardPDF = async ({ toast.success('PDF exported successfully!', { id: 'export-pdf' }); } catch (error) { - console.error('Error generating PDF:', error); toast.error('Failed to export PDF. Please try again.', { id: 'export-pdf', }); diff --git a/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx b/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx index 46e85a23..4659c650 100644 --- a/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx +++ b/src/components/pages/marketing/pdf/DeliveryOrderExport.tsx @@ -7,6 +7,7 @@ import { formatDate, formatNumber, formatVechicleNumber } from '@/lib/helper'; import { format } from 'path'; import { date } from 'yup'; import pdfStyles from '@/components/pages/marketing/pdf/styles/MarketingPDFStyles'; +import toast from 'react-hot-toast'; interface DeliveryOrderExportProps { data?: Marketing; @@ -23,7 +24,7 @@ const DeliveryOrderExport = ({ const handleDownloadPDF = async () => { if (!salesData) { - alert('No sales order data available'); + toast.error('No sales order data available'); return; } setIsGeneratingPDF(true); @@ -40,8 +41,7 @@ const DeliveryOrderExport = ({ document.body.removeChild(link); URL.revokeObjectURL(url); } catch (error) { - console.error('Error generating PDF:', error); - alert('Failed to generate PDF. Please try again.'); + toast.error('Failed to generate PDF. Please try again.'); } finally { setIsGeneratingPDF(false); } diff --git a/src/components/pages/marketing/pdf/SalesOrderExport.tsx b/src/components/pages/marketing/pdf/SalesOrderExport.tsx index f9f0a6c5..5d892853 100644 --- a/src/components/pages/marketing/pdf/SalesOrderExport.tsx +++ b/src/components/pages/marketing/pdf/SalesOrderExport.tsx @@ -5,6 +5,7 @@ import { Document, Image, Page, pdf, Text, View } from '@react-pdf/renderer'; import { useMemo, useState } from 'react'; import { formatDate, formatNumber } from '@/lib/helper'; import pdfStyles from '@/components/pages/marketing/pdf/styles/MarketingPDFStyles'; +import toast from 'react-hot-toast'; interface SalesOrderExportProps { data?: Marketing; @@ -17,7 +18,7 @@ const SalesOrderExport = ({ data }: SalesOrderExportProps) => { const handleDownloadPDF = async () => { if (!salesData) { - alert('No sales order data available'); + toast.error('No sales order data available'); return; } setIsGeneratingPDF(true); @@ -32,8 +33,7 @@ const SalesOrderExport = ({ data }: SalesOrderExportProps) => { document.body.removeChild(link); URL.revokeObjectURL(url); } catch (error) { - console.error('Error generating PDF:', error); - alert('Failed to generate PDF. Please try again.'); + toast.error('Failed to generate PDF. Please try again.'); } finally { setIsGeneratingPDF(false); } diff --git a/src/services/api/marketing/marketing.ts b/src/services/api/marketing/marketing.ts index 59b9b4c8..05afaa30 100644 --- a/src/services/api/marketing/marketing.ts +++ b/src/services/api/marketing/marketing.ts @@ -48,8 +48,7 @@ export class SalesOrderService extends BaseApiService< }, }); } catch (error) { - console.error('Error approve marketing:', error); - return undefined; + throw error; } } @@ -72,8 +71,7 @@ export class SalesOrderService extends BaseApiService< }, }); } catch (error) { - console.error('Error bulk approve marketing:', error); - return undefined; + throw error; } } @@ -95,8 +93,7 @@ export class SalesOrderService extends BaseApiService< }, }); } catch (error) { - console.error('Error delivery marketing:', error); - return undefined; + throw error; } } } diff --git a/src/services/api/production/chickin.ts b/src/services/api/production/chickin.ts index f582c5d4..0efaa0f9 100644 --- a/src/services/api/production/chickin.ts +++ b/src/services/api/production/chickin.ts @@ -35,8 +35,7 @@ export class ChickinService extends BaseApiService< }, }); } catch (error) { - console.error('Error approve chickin:', error); - return undefined; + throw error; } } } diff --git a/src/stores/dashboard/slices/dashboard-filter.slice.ts b/src/stores/dashboard/slices/dashboard-filter.slice.ts index 086ea959..dc398b78 100644 --- a/src/stores/dashboard/slices/dashboard-filter.slice.ts +++ b/src/stores/dashboard/slices/dashboard-filter.slice.ts @@ -25,8 +25,6 @@ export const createDashboardFilterSlice: StateCreator< setFilterValues: (values) => set({ filterValues: values }), resetFilterValues: () => { - alert('reset filter values'); - return set({ filterValues: { startDate: '',