Fix Ads data mismatch, optimize Forecast performance, and add Excel-style in-column stock filtering

This commit is contained in:
Christian Vidal Wolf
2026-01-27 21:12:27 +01:00
parent cb9beecaec
commit db65509bab
5 changed files with 174 additions and 36 deletions
+8 -1
View File
@@ -3,6 +3,7 @@ import * as XLSX from 'xlsx';
import { CombinedKPIs } from '../types';
import { pivotWeeklySalesData, WeeklyPivotRow } from '../services/dataProcessor';
import { StockBadge } from './StockBadge';
import { InColumnStockFilter } from './InColumnStockFilter';
interface WeeklyGridProps {
data: CombinedKPIs[];
@@ -12,6 +13,8 @@ interface WeeklyGridProps {
};
onDrillDown?: (sku: string) => void;
stockMap?: Map<string, number>;
stockFilter: string[];
onStockFilterChange: (newFilters: string[]) => void;
}
type SortConfig = {
@@ -53,7 +56,7 @@ const Top50Badge: React.FC<{ rank: number; label?: string; theme?: 'amber' | 'bl
);
};
const WeeklyGrid: React.FC<WeeklyGridProps> = ({ data, top50Ranking, onDrillDown, stockMap }) => {
const WeeklyGrid: React.FC<WeeklyGridProps> = ({ data, top50Ranking, onDrillDown, stockMap, stockFilter, onStockFilterChange }) => {
// Pivot data - memoized
const { rows, weeks: allWeeks } = useMemo(() => pivotWeeklySalesData(data), [data]);
@@ -408,6 +411,10 @@ const WeeklyGrid: React.FC<WeeklyGridProps> = ({ data, top50Ranking, onDrillDown
>
<div className="flex items-center gap-2">
<span>Product Details</span>
<InColumnStockFilter
currentFilters={stockFilter}
onFilterChange={onStockFilterChange}
/>
{sortConfig?.metric === 'rank' && (
<span className="text-amber-500 font-black text-sm animate-bounce-subtle">
{sortConfig.direction === 'asc' ? '↑' : '↓'}