From c898154b488480cda868a30ad3c2ba8bda32e652 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Thu, 9 Apr 2026 14:14:50 +0700 Subject: [PATCH] feat: add export button --- .../production/recording/RecordingTable.tsx | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/components/pages/production/recording/RecordingTable.tsx b/src/components/pages/production/recording/RecordingTable.tsx index cea30502..8104d162 100644 --- a/src/components/pages/production/recording/RecordingTable.tsx +++ b/src/components/pages/production/recording/RecordingTable.tsx @@ -48,6 +48,7 @@ import { useUiStore } from '@/stores/ui/ui.store'; import { usePathname } from 'next/navigation'; import { Color } from '@/types/theme'; import ButtonFilter from '@/components/helper/ButtonFilter'; +import Dropdown from '@/components/Dropdown'; // ===== STATUS BADGE UTILITIES ===== const statusTextMap: Record = { @@ -352,6 +353,9 @@ const RecordingTable = () => { const [isRejectLoading, setIsRejectLoading] = useState(false); const [, setApprovalNotes] = useState(''); + const [isLoadingExportingToExcel, setIsLoadingExportingToExcel] = + useState(false); + const singleDeleteModal = useModal(); const approveModal = useModal(); const rejectModal = useModal(); @@ -686,6 +690,14 @@ const RecordingTable = () => { }); }, [selectedRowIds, recordings, isRecordingApproved]); + const exportToExcelHandler = async () => { + setIsLoadingExportingToExcel(true); + + await RecordingApi.exportToExcel(getTableFilterQueryString()); + + setIsLoadingExportingToExcel(false); + }; + useEffect(() => { if (isResponseSuccess(recordings) && recordings.data) { const newSelection: Record = {}; @@ -1313,6 +1325,50 @@ const RecordingTable = () => { onClick={handleFilterModalOpen} className='px-3 py-2.5' /> + + + + Export +
+ +
+ + } + className={{ + content: + 'mt-1 rounded-xl border border-base-content/5 shadow-sm overflow-hidden', + }} + > + +