diff --git a/services/dataProcessor.ts b/services/dataProcessor.ts index 4052bb2..674c6df 100644 --- a/services/dataProcessor.ts +++ b/services/dataProcessor.ts @@ -629,13 +629,16 @@ export const mergeSalesAndAdsData = ( // --- EXISTING HELPERS --- -// Filter Ads Data by Country, Year, Week, ASIN, and Product Line +// Filter Ads Data by Country, Year, Week, ASIN, SKU, and Product Line export const filterAdsData = ( adsData: AdsRecord[], filters: FilterState, - asinMetadata?: Map + asinMetadata?: Map ): AdsRecord[] => { return adsData.filter(ad => { + const asin = ad.asin.trim().toUpperCase(); + const meta = asinMetadata?.get(asin); + // Country/Customer match (ads use 'country', sales use 'customer') const countryMatch = filters.customer.length === 0 ? PAN_EU_COUNTRIES.some(c => c.toUpperCase() === ad.country.toUpperCase()) @@ -651,16 +654,21 @@ export const filterAdsData = ( // ASIN match const asinMatch = filters.asin.length === 0 || - filters.asin.some(a => a.toUpperCase() === ad.asin.toUpperCase()); + filters.asin.some(a => a.toUpperCase() === asin); + + // SKU match (Requires metadata) + let skuMatch = true; + if (filters.sku.length > 0) { + skuMatch = meta ? filters.sku.some(s => s.toUpperCase() === meta.sku.toUpperCase()) : false; + } // Line match (Requires metadata) let lineMatch = true; - if (filters.line.length > 0 && asinMetadata) { - const meta = asinMetadata.get(ad.asin.trim().toUpperCase()); + if (filters.line.length > 0) { lineMatch = meta ? filters.line.includes(meta.line) : false; } - return countryMatch && yearMatch && weekMatch && asinMatch && lineMatch; + return countryMatch && yearMatch && weekMatch && asinMatch && skuMatch && lineMatch; }); };