From 953a395f245dbfa0c1e6a1cb57d1e20ff7fafc86 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Sun, 16 Aug 2026 15:32:25 +0700 Subject: [PATCH] feat: enhance variant deletion handling to update loaded variants on success --- .../js/pages/admin/master/product/index.tsx | 10 +++++++++- .../pages/admin/master/raw-material/index.tsx | 18 +++++++++++++++++- .../master/raw-material/variant/sub-row.tsx | 8 +++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/resources/js/pages/admin/master/product/index.tsx b/resources/js/pages/admin/master/product/index.tsx index 0f8a489..2eacd6d 100644 --- a/resources/js/pages/admin/master/product/index.tsx +++ b/resources/js/pages/admin/master/product/index.tsx @@ -175,7 +175,15 @@ export default function ProductIndex({ products, categories, productNames, filte variant: deletingVariant.variant.id, }), { - onSuccess: () => setDeletingVariant(null), + onSuccess: () => { + setDeletingVariant(null); + setLoadedVariants((prev) => ({ + ...prev, + [deletingVariant.product.id]: (prev[deletingVariant.product.id] ?? []).filter( + (v) => v.id !== deletingVariant.variant.id, + ), + })); + }, }, ); } diff --git a/resources/js/pages/admin/master/raw-material/index.tsx b/resources/js/pages/admin/master/raw-material/index.tsx index 580f07f..9433820 100644 --- a/resources/js/pages/admin/master/raw-material/index.tsx +++ b/resources/js/pages/admin/master/raw-material/index.tsx @@ -156,7 +156,15 @@ export default function RawMaterialIndex({ rawMaterials, rawMaterialNames, filte variant: deletingVariant.variant.id, }), { - onSuccess: () => setDeletingVariant(null), + onSuccess: () => { + setDeletingVariant(null); + setLoadedVariants((prev) => ({ + ...prev, + [deletingVariant.rawMaterial.id]: (prev[deletingVariant.rawMaterial.id] ?? []).filter( + (v) => v.id !== deletingVariant.variant.id, + ), + })); + }, onError: () => setDeletingVariant(null), }, ); @@ -327,6 +335,14 @@ export default function RawMaterialIndex({ rawMaterials, rawMaterialNames, filte variants={loadedVariants[rawMaterial.id] ?? []} isLoading={loadingVariants[rawMaterial.id] ?? false} allPreviewItems={allPreviewItems} + onDeleteSuccess={(variantId: number) => { + setLoadedVariants((prev) => ({ + ...prev, + [rawMaterial.id]: (prev[rawMaterial.id] ?? []).filter( + (v) => v.id !== variantId, + ), + })); + }} /> )} /> diff --git a/resources/js/pages/admin/master/raw-material/variant/sub-row.tsx b/resources/js/pages/admin/master/raw-material/variant/sub-row.tsx index 170f6a1..6cd38f2 100644 --- a/resources/js/pages/admin/master/raw-material/variant/sub-row.tsx +++ b/resources/js/pages/admin/master/raw-material/variant/sub-row.tsx @@ -27,11 +27,13 @@ export function RawMaterialVariantSubRow({ variants: loadedVariants, isLoading, allPreviewItems, + onDeleteSuccess, }: { rawMaterial: RawMaterial; variants: RawMaterialVariant[]; isLoading: boolean; allPreviewItems: ImagePreviewItem[]; + onDeleteSuccess?: (variantId: number) => void; }) { const { can } = useCan(); const [deletingVariant, setDeletingVariant] = @@ -48,7 +50,11 @@ export function RawMaterialVariantSubRow({ variant: deletingVariant.id, }), { - onSuccess: () => setDeletingVariant(null), + onSuccess: () => { + const deletedId = deletingVariant.id; + setDeletingVariant(null); + onDeleteSuccess?.(deletedId); + }, }, ); }