From 6e297403d689b3c8d9dc4c422bb4881c0a0feac4 Mon Sep 17 00:00:00 2001 From: Nils-Johan Gynther Date: Sun, 19 Apr 2026 19:25:02 +0200 Subject: [PATCH] feat(products): update event handling for product list refresh on creation and reset actions --- frontend/app/admin/products/AdminProductList.tsx | 6 +++++- frontend/app/admin/products/MergePreviewForm.tsx | 4 +--- frontend/app/admin/products/ResetProductsButton.tsx | 4 +--- .../app/admin/products/pending/PendingProductsClient.tsx | 3 --- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/frontend/app/admin/products/AdminProductList.tsx b/frontend/app/admin/products/AdminProductList.tsx index 521e67fe..d7dc5921 100644 --- a/frontend/app/admin/products/AdminProductList.tsx +++ b/frontend/app/admin/products/AdminProductList.tsx @@ -72,7 +72,11 @@ export default function AdminProductList() { useEffect(() => { const handler = () => refetchProducts(); window.addEventListener('product-created', handler); - return () => window.removeEventListener('product-created', handler); + window.addEventListener('product-list-changed', handler); + return () => { + window.removeEventListener('product-created', handler); + window.removeEventListener('product-list-changed', handler); + }; }, [refetchProducts]); useEffect(() => { diff --git a/frontend/app/admin/products/MergePreviewForm.tsx b/frontend/app/admin/products/MergePreviewForm.tsx index 23942ded..b868219f 100644 --- a/frontend/app/admin/products/MergePreviewForm.tsx +++ b/frontend/app/admin/products/MergePreviewForm.tsx @@ -1,7 +1,6 @@ 'use client'; import { useState, useTransition, useEffect } from 'react'; -import { useRouter } from 'next/navigation'; import type { MergePreview, Product } from '../../../features/inventory/types'; export default function MergePreviewForm() { @@ -14,7 +13,6 @@ export default function MergePreviewForm() { const [isPending, startTransition] = useTransition(); const [isConfirming, setIsConfirming] = useState(false); const [isExpanded, setIsExpanded] = useState(false); - const router = useRouter(); useEffect(() => { if (isExpanded && products.length === 0) { @@ -96,7 +94,7 @@ export default function MergePreviewForm() { setIsConfirming(false); setSourceProductId(''); setTargetProductId(''); - router.refresh(); + window.dispatchEvent(new CustomEvent('product-list-changed')); } catch (err) { setError(err instanceof Error ? err.message : 'Okänt fel'); } diff --git a/frontend/app/admin/products/ResetProductsButton.tsx b/frontend/app/admin/products/ResetProductsButton.tsx index 5263fb22..adcd5dc0 100644 --- a/frontend/app/admin/products/ResetProductsButton.tsx +++ b/frontend/app/admin/products/ResetProductsButton.tsx @@ -1,12 +1,10 @@ 'use client'; import { useState } from 'react'; -import { useRouter } from 'next/navigation'; export default function ResetProductsButton() { const [isPending, setIsPending] = useState(false); const [error, setError] = useState(null); - const router = useRouter(); async function handleClick() { if ( @@ -24,7 +22,7 @@ export default function ResetProductsButton() { const data = await res.json().catch(() => ({})); throw new Error(data?.error || 'Återställning misslyckades'); } - router.refresh(); + window.dispatchEvent(new CustomEvent('product-list-changed')); } catch (err) { setError(err instanceof Error ? err.message : 'Okänt fel'); } finally { diff --git a/frontend/app/admin/products/pending/PendingProductsClient.tsx b/frontend/app/admin/products/pending/PendingProductsClient.tsx index 1777ec00..68df5f1d 100644 --- a/frontend/app/admin/products/pending/PendingProductsClient.tsx +++ b/frontend/app/admin/products/pending/PendingProductsClient.tsx @@ -1,7 +1,6 @@ 'use client'; import { useState, useTransition } from 'react'; -import { useRouter } from 'next/navigation'; type PendingProduct = { id: number; @@ -17,7 +16,6 @@ export default function PendingProductsClient({ products: initial }: { products: const [isPending, startTransition] = useTransition(); const [error, setError] = useState(null); const [processing, setProcessing] = useState(null); - const router = useRouter(); function handleAction(id: number, status: 'active' | 'rejected') { setError(null); @@ -34,7 +32,6 @@ export default function PendingProductsClient({ products: initial }: { products: throw new Error(data?.error || 'Fel vid uppdatering'); } setProducts((prev) => prev.filter((p) => p.id !== id)); - router.refresh(); } catch (err) { setError(err instanceof Error ? err.message : 'Fel vid uppdatering'); } finally {