From 2f1524d0fa0b5cfe00c7e70239734971ec2dbd9a Mon Sep 17 00:00:00 2001 From: Mohammed-Fardeen-02 Date: Sat, 29 Aug 2026 16:57:53 +0530 Subject: [PATCH] resolved the assets filter --- .../product/components/ProductAssetsTab.tsx | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/features/product/components/ProductAssetsTab.tsx b/src/features/product/components/ProductAssetsTab.tsx index f1d4319..5811601 100644 --- a/src/features/product/components/ProductAssetsTab.tsx +++ b/src/features/product/components/ProductAssetsTab.tsx @@ -33,9 +33,23 @@ export const ProductAssetsTab: React.FC = ({ const [isBulkMode, setIsBulkMode] = useState(false); const [selectedVariantIds, setSelectedVariantIds] = useState([]); + // Strict product isolation & configured variants filtering + const configuredVariants = useMemo(() => { + const productSpecific = variants.filter((v: any) => { + const pId = v.parentProductId || v.product_id || v.productId; + return !pId || pId === productId; + }); + if (productSpecific.length <= 1) return productSpecific; + return productSpecific.filter((v: any) => { + const hasAttrObj = v.attributes && Object.keys(v.attributes).length > 0; + const hasAttrArr = Array.isArray(v.values) && v.values.length > 0; + return hasAttrObj || hasAttrArr; + }); + }, [variants, productId]); + const variantFilterOptions = useMemo(() => { const map = new Map }>(); - variants.forEach(v => { + configuredVariants.forEach(v => { if (v.attributes && typeof v.attributes === 'object') { Object.entries(v.attributes).forEach(([code, val]) => { if (val !== undefined && val !== null && val !== '') { @@ -67,7 +81,7 @@ export const ProductAssetsTab: React.FC = ({ }); }); return result; - }, [variants]); + }, [configuredVariants]); const [loading, setLoading] = useState(false); @@ -164,7 +178,7 @@ export const ProductAssetsTab: React.FC = ({ const combinedAssets = useMemo(() => { const list: any[] = []; - const validVariantIds = new Set(variants.map(v => v.id)); + const validVariantIds = new Set(configuredVariants.map(v => v.id)); assignedAssets.forEach(a => { const aProdId = a.product_id || (a as any).productId; @@ -181,7 +195,7 @@ export const ProductAssetsTab: React.FC = ({ assignedVariantAssets.forEach(va => { const vId = va.variantId || va.variant_id || va.variant?.id; if (vId && (validVariantIds.size === 0 || validVariantIds.has(vId))) { - const matchedVariant = variants.find(v => v.id === vId); + const matchedVariant = configuredVariants.find(v => v.id === vId); const vName = va.variantName || va.variant?.name || matchedVariant?.name || 'Variant'; const vSku = va.variantSku || va.variant?.sku || matchedVariant?.sku || ''; list.push({ @@ -195,7 +209,7 @@ export const ProductAssetsTab: React.FC = ({ }); return list; - }, [assignedAssets, assignedVariantAssets, variants, productId]); + }, [assignedAssets, assignedVariantAssets, configuredVariants, productId]); const [scopeFilter, setScopeFilter] = useState('all'); @@ -234,7 +248,11 @@ export const ProductAssetsTab: React.FC = ({ const sorted = [...data].sort((a, b) => (a.display_order || 0) - (b.display_order || 0)); setAssignedAssets(sorted); const rawVars = Array.isArray(productVariants) ? productVariants : (productVariants as any)?.data || []; - setVariants(Array.isArray(rawVars) ? rawVars : []); + const productIsolatedVars = (Array.isArray(rawVars) ? rawVars : []).filter((v: any) => { + const pId = v.parentProductId || v.product_id || v.productId; + return !pId || pId === productId; + }); + setVariants(productIsolatedVars); const rawVarAssets = Array.isArray(allVariantAssets) ? allVariantAssets : (allVariantAssets as any)?.data || []; setAssignedVariantAssets(Array.isArray(rawVarAssets) ? rawVarAssets : []); } catch (err: any) { @@ -635,7 +653,7 @@ export const ProductAssetsTab: React.FC = ({ {/* Variant Target Selector */} - {variants.length > 0 && ( + {configuredVariants.length > 0 && (