diff --git a/src/features/grid/components/floating-summary-bar.tsx b/src/features/grid/components/floating-summary-bar.tsx index 72be552..ccec628 100644 --- a/src/features/grid/components/floating-summary-bar.tsx +++ b/src/features/grid/components/floating-summary-bar.tsx @@ -3,6 +3,9 @@ import { useGridStore } from "@/features/grid/store/use-grid-store"; import { BulkAiAnalyzer } from "./bulk-ai-analyzer"; +import { useSaveDrafts } from "@/features/grid/hooks/use-save-drafts"; +import { Loader2, CheckCircle, AlertCircle } from "lucide-react"; +import { useState, useTransition } from "react"; function Stat({ label, value, sub }: { label: string; value: string; sub?: string }) { // Determine color based on label to match the prototype @@ -17,8 +20,20 @@ function Stat({ label, value, sub }: { label: string; value: string; sub?: strin } export function FloatingSummaryBar() { - const { summary, draftChanges } = useGridStore(); - const hasDrafts = Object.keys(draftChanges).length > 0; + const { summary, draftChanges, rows, filters } = useGridStore(); + const [isPending, startTransition] = useTransition(); + const [saveStatus, setSaveStatus] = useState<"idle" | "success" | "error">("idle"); + + const visibleCodeins = rows.map(r => r.codein); + const { save, hasDrafts, count } = useSaveDrafts(filters.magasin || "TOTAL", visibleCodeins); + + const handleSave = () => { + startTransition(async () => { + const result = await save(); + setSaveStatus(result.success ? "success" : "error"); + setTimeout(() => setSaveStatus("idle"), 3000); + }); + }; return (
{hasDrafts && ( - {Object.keys(draftChanges).length} modif. + {count} modif. )}
@@ -56,25 +71,29 @@ export function FloatingSummaryBar() {