mirror of
https://github.com/christianvidalwolf-prog/CrazeAnalytix.git
synced 2026-08-03 20:15:23 +02:00
Fix: Forecast View now respects global filters (Product Line, ASIN, etc.)
This commit is contained in:
@@ -65,12 +65,32 @@ const ForecastView: React.FC<ForecastViewProps> = ({ data, filters, top50Ranking
|
|||||||
return MONTH_ORDER.slice(0, lastDataMonthIdx + 1);
|
return MONTH_ORDER.slice(0, lastDataMonthIdx + 1);
|
||||||
}, [filters.month, lastDataMonthIdx]);
|
}, [filters.month, lastDataMonthIdx]);
|
||||||
|
|
||||||
// Global Aggregate Data
|
// Base Global Filtering (Line, ASIN, SKU, Title)
|
||||||
|
const baseFilteredData = useMemo(() => {
|
||||||
|
let result = data;
|
||||||
|
|
||||||
|
if (filters.line && filters.line.length > 0) {
|
||||||
|
result = result.filter(p => filters.line.includes(p.line));
|
||||||
|
}
|
||||||
|
if (filters.asin && filters.asin.length > 0) {
|
||||||
|
result = result.filter(p => filters.asin.includes(p.asin));
|
||||||
|
}
|
||||||
|
if (filters.sku && filters.sku.length > 0) {
|
||||||
|
result = result.filter(p => filters.sku.includes(p.sku));
|
||||||
|
}
|
||||||
|
if (filters.title && filters.title.length > 0) {
|
||||||
|
result = result.filter(p => filters.title.includes(p.title));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}, [data, filters.line, filters.asin, filters.sku, filters.title]);
|
||||||
|
|
||||||
|
// Global Aggregate Data (respects filters)
|
||||||
const globalMonthlyData = useMemo(() => {
|
const globalMonthlyData = useMemo(() => {
|
||||||
return MONTH_ORDER.map(m => {
|
return MONTH_ORDER.map(m => {
|
||||||
let forecast = 0;
|
let forecast = 0;
|
||||||
let actual = 0;
|
let actual = 0;
|
||||||
data.forEach(p => {
|
baseFilteredData.forEach(p => {
|
||||||
const monthPoint = p.monthlyData.find(md => md.month === m);
|
const monthPoint = p.monthlyData.find(md => md.month === m);
|
||||||
if (monthPoint) {
|
if (monthPoint) {
|
||||||
forecast += monthPoint.forecastUnits;
|
forecast += monthPoint.forecastUnits;
|
||||||
@@ -79,7 +99,7 @@ const ForecastView: React.FC<ForecastViewProps> = ({ data, filters, top50Ranking
|
|||||||
});
|
});
|
||||||
return { name: m, Forecast: forecast, Actual: actual };
|
return { name: m, Forecast: forecast, Actual: actual };
|
||||||
});
|
});
|
||||||
}, [data]);
|
}, [baseFilteredData]);
|
||||||
|
|
||||||
const globalSummary = useMemo(() => {
|
const globalSummary = useMemo(() => {
|
||||||
let periodForecast = 0;
|
let periodForecast = 0;
|
||||||
@@ -87,7 +107,7 @@ const ForecastView: React.FC<ForecastViewProps> = ({ data, filters, top50Ranking
|
|||||||
let annualForecast = 0;
|
let annualForecast = 0;
|
||||||
let annualActual = 0;
|
let annualActual = 0;
|
||||||
|
|
||||||
data.forEach(p => {
|
baseFilteredData.forEach(p => {
|
||||||
annualForecast += p.annualForecast;
|
annualForecast += p.annualForecast;
|
||||||
p.monthlyData.forEach(md => {
|
p.monthlyData.forEach(md => {
|
||||||
annualActual += md.actualUnits;
|
annualActual += md.actualUnits;
|
||||||
@@ -109,10 +129,10 @@ const ForecastView: React.FC<ForecastViewProps> = ({ data, filters, top50Ranking
|
|||||||
annualActual,
|
annualActual,
|
||||||
annualFulfillment
|
annualFulfillment
|
||||||
};
|
};
|
||||||
}, [data, activeMonths]);
|
}, [baseFilteredData, activeMonths]);
|
||||||
|
|
||||||
const filteredProducts = useMemo(() => {
|
const filteredProducts = useMemo(() => {
|
||||||
let result = data;
|
let result = baseFilteredData;
|
||||||
|
|
||||||
if (searchTerm) {
|
if (searchTerm) {
|
||||||
const s = searchTerm.toLowerCase();
|
const s = searchTerm.toLowerCase();
|
||||||
@@ -129,7 +149,7 @@ const ForecastView: React.FC<ForecastViewProps> = ({ data, filters, top50Ranking
|
|||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}, [data, searchTerm, showOnlyTop50, top50Mode, top50Ranking]);
|
}, [baseFilteredData, searchTerm, showOnlyTop50, top50Mode, top50Ranking]);
|
||||||
|
|
||||||
const sortedProducts = useMemo(() => {
|
const sortedProducts = useMemo(() => {
|
||||||
const result = [...filteredProducts];
|
const result = [...filteredProducts];
|
||||||
|
|||||||
Reference in New Issue
Block a user