diff --git a/frontend/components/admin/ExportPanel.tsx b/frontend/components/admin/ExportPanel.tsx new file mode 100644 index 00000000..25a4892b --- /dev/null +++ b/frontend/components/admin/ExportPanel.tsx @@ -0,0 +1,137 @@ +"use client"; + +import { useState } from "react"; +import { FileDown, Loader2 } from "lucide-react"; +import { useExport } from "@/hooks/useExport"; +import { Toast } from "@/components/Toast"; + +export function ExportPanel() { + const { exportSnapshot, exportAuditTrail, isLoading, error } = useExport(); + const [successMessage, setSuccessMessage] = useState(null); + + const handleExportSnapshot = async (format: "csv" | "xlsx") => { + try { + setSuccessMessage(null); + await exportSnapshot(format); + const formatName = format === "csv" ? "CSV" : "Excel"; + setSuccessMessage(`Inventory snapshot exported as ${formatName}`); + setTimeout(() => setSuccessMessage(null), 4000); + } catch (err) { + // Error handled by useExport hook + } + }; + + const handleExportAuditTrail = async (format: "csv" | "xlsx") => { + try { + setSuccessMessage(null); + await exportAuditTrail(format); + const formatName = format === "csv" ? "CSV" : "Excel"; + setSuccessMessage(`Audit trail exported as ${formatName}`); + setTimeout(() => setSuccessMessage(null), 4000); + } catch (err) { + // Error handled by useExport hook + } + }; + + return ( +
+
+
+
+ +
+
+

Export & Reports

+

+ Download inventory snapshots and audit trails in CSV or Excel formats +

+
+
+ + {/* Inventory Snapshot Section */} +
+

Inventory Snapshot

+

+ Export current inventory state with all item details +

+
+ + +
+
+ + {/* Audit Trail Section */} +
+

Audit Trail

+

+ Export complete audit log of all system actions and changes +

+
+ + +
+
+
+ + {/* Status Messages */} + {error && ( + {}} + /> + )} + {successMessage && ( + {}} /> + )} +
+ ); +}