Fix: Ensure product metadata is built globally for Forecast View

This commit is contained in:
Christian Vidal Wolf
2026-01-27 10:22:06 +01:00
parent 770566ac9c
commit 5cac85c693
+8 -6
View File
@@ -90,7 +90,7 @@ const App: React.FC = () => {
console.log('[App] Successfully loaded', data.length, 'rows');
// Refresh forecast too
handleForecastFetch(data, filters);
handleForecastFetch(data, data, filters);
} catch (error) {
console.error("Failed to fetch/parse CSV", error);
alert("Error loading data. Please refresh the page.");
@@ -143,7 +143,7 @@ const App: React.FC = () => {
}
}, []);
const handleForecastFetch = useCallback(async (sales: SalesRecord[], activeFilters: FilterState) => {
const handleForecastFetch = useCallback(async (sales: SalesRecord[], globalSales: SalesRecord[], activeFilters: FilterState) => {
try {
const isUK = activeFilters.customer.includes('Amazon UK');
const filename = isUK ? '/fc UK 26.xlsx' : '/fc 26.xlsx';
@@ -155,9 +155,11 @@ const App: React.FC = () => {
const buffer = await response.arrayBuffer();
const fcRecords = await processForecastExcel(buffer);
// Build precise metadata map from sales records
// Build precise metadata map from GLOBAL sales records to ensure info is found even if filtered for market
const meta = new Map<string, { sku: string; title: string; line: string }>();
sales.forEach(r => {
const metaDataSource = globalSales.length > 0 ? globalSales : sales;
metaDataSource.forEach(r => {
const asin = r.asin.trim().toUpperCase();
const existing = meta.get(asin);
if (!existing || (r.title && r.title.length > (existing.title?.length || 0))) {
@@ -181,7 +183,7 @@ const App: React.FC = () => {
...filters,
year: [] // Ensure we don't filter out 2025/2026 if a single year is selected in UI
});
handleForecastFetch(forecastRelevantData, filters);
handleForecastFetch(forecastRelevantData, rawData, filters);
}
}, [filters, rawData, handleForecastFetch]);
@@ -260,7 +262,7 @@ const App: React.FC = () => {
handleTrafficFetch();
// 1d. Fetch Forecast data
handleForecastFetch(cachedData || [], filters);
handleForecastFetch(cachedData || [], cachedData || [], filters);
};
initApp();
}, [handleDataFetch]);