diff --git a/src/components/cases/expenses-tab.tsx b/src/components/cases/expenses-tab.tsx
index a6008a4..355181f 100644
--- a/src/components/cases/expenses-tab.tsx
+++ b/src/components/cases/expenses-tab.tsx
@@ -6,7 +6,7 @@ import { Label } from "@/components/ui/label";
import { Checkbox } from "@/components/ui/checkbox";
import { supabase } from "@/integrations/supabase/client";
import { useAuth } from "@/lib/auth";
-import { Plus, Trash2, Loader2, Receipt as ReceiptIcon, CheckCircle2, Undo2, Download } from "lucide-react";
+import { Plus, Trash2, Loader2, Receipt as ReceiptIcon, CheckCircle2, Undo2, Download, RefreshCw } from "lucide-react";
import { formatCurrency, formatDate } from "@/lib/format";
import { ensureMarkedInvoicedPlaceholder } from "@/lib/invoice-generation";
import { toast } from "sonner";
@@ -69,6 +69,18 @@ export function CaseExpensesTab({ caseId }: { caseId: string }) {
return () => window.removeEventListener("expenses:changed", handler);
}, [caseId]);
+ // Refresh when tab/window becomes visible again (covers Quick Add from another page)
+ useEffect(() => {
+ const onFocus = () => load();
+ const onVis = () => { if (document.visibilityState === "visible") load(); };
+ window.addEventListener("focus", onFocus);
+ document.addEventListener("visibilitychange", onVis);
+ return () => {
+ window.removeEventListener("focus", onFocus);
+ document.removeEventListener("visibilitychange", onVis);
+ };
+ }, [caseId]);
+
// Load case client_id for placeholder invoice creation
useEffect(() => {
(async () => {
@@ -182,6 +194,9 @@ export function CaseExpensesTab({ caseId }: { caseId: string }) {