Implement Vendor Stock Filtering across Weekly Sales, Ads, and Forecast views

This commit is contained in:
Christian Vidal Wolf
2026-01-28 10:18:08 +01:00
parent 97071c7b62
commit 5915bb4c0e
7 changed files with 182 additions and 33 deletions
+18 -3
View File
@@ -54,7 +54,6 @@ const App: React.FC = () => {
// Modal State
const [isDataModalOpen, setIsDataModalOpen] = useState(false);
// Filters State
const [filters, setFilters] = useState<FilterState>({
customer: [],
year: [],
@@ -63,7 +62,9 @@ const App: React.FC = () => {
asin: [],
sku: [],
title: [],
week: [],
stock: [],
vendorStock: [],
});
// Handle Data Fetch (Simplified)
@@ -229,6 +230,7 @@ const App: React.FC = () => {
title: [],
week: [],
stock: [],
vendorStock: [],
});
};
@@ -405,8 +407,15 @@ const App: React.FC = () => {
return metaMap;
}, [rawData]);
const filteredData = useMemo(() => filterData(rawData, filters, stockMap), [rawData, filters, stockMap]);
const filteredAdsData = useMemo(() => filterAdsData(adsData, filters, globalAsinMetadata, stockMap), [adsData, filters, globalAsinMetadata, stockMap]);
const top50Mode = useMemo(() => {
const hasUK = filters.customer.includes('Amazon UK');
const hasEU = filters.customer.some(c => ['Amazon DE', 'Amazon IT', 'Amazon FR', 'Amazon ES'].includes(c));
if (hasUK) return 'uk';
return 'eu';
}, [filters.customer]);
const filteredData = useMemo(() => filterData(rawData, filters, stockMap, vendorStockMap, top50Mode), [rawData, filters, stockMap, vendorStockMap, top50Mode]);
const filteredAdsData = useMemo(() => filterAdsData(adsData, filters, globalAsinMetadata, stockMap, vendorStockMap, top50Mode), [adsData, filters, globalAsinMetadata, stockMap, vendorStockMap, top50Mode]);
const aggregatedData = useMemo(() => aggregateData(filteredData), [filteredData]);
// Calculate country-aware Top 50 Best Sellers for 2025
@@ -641,6 +650,8 @@ const App: React.FC = () => {
vendorStockMap={vendorStockMap}
stockFilter={filters.stock}
onStockFilterChange={(s) => setFilters(prev => ({ ...prev, stock: s }))}
vendorStockFilter={filters.vendorStock}
onVendorStockFilterChange={(s) => setFilters(prev => ({ ...prev, vendorStock: s }))}
customerFilters={filters.customer}
top50Mode={filters.customer.includes('Amazon UK') ? 'uk' : 'eu'}
top50Ranking={top50Ranking2025}
@@ -662,6 +673,8 @@ const App: React.FC = () => {
vendorStockMap={vendorStockMap}
stockFilter={filters.stock}
onStockFilterChange={(s) => setFilters(prev => ({ ...prev, stock: s }))}
vendorStockFilter={filters.vendorStock}
onVendorStockFilterChange={(s) => setFilters(prev => ({ ...prev, vendorStock: s }))}
top50Mode={filters.customer.includes('Amazon UK') ? 'uk' : 'eu'}
/>
</Suspense>
@@ -676,6 +689,8 @@ const App: React.FC = () => {
vendorStockMap={vendorStockMap}
stockFilter={filters.stock}
onStockFilterChange={(s) => setFilters(prev => ({ ...prev, stock: s }))}
vendorStockFilter={filters.vendorStock}
onVendorStockFilterChange={(s) => setFilters(prev => ({ ...prev, vendorStock: s }))}
top50Mode={filters.customer.includes('Amazon UK') ? 'uk' : 'eu'}
/>
</Suspense>