From 76d901fcde54af16eee4c6ce8f82993802274f83 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Fri, 12 Jun 2026 08:29:47 +0200 Subject: [PATCH] feat: remove MKT and Experiments tabs and all related code Co-Authored-By: Claude Sonnet 4.6 (1M context) --- App.tsx | 88 +- api/experiments.ts | 119 --- api/fetch-mkt-data.ts | 45 -- components/ExperimentBadge.tsx | 115 --- components/ExperimentTracker.tsx | 634 --------------- components/ExperimentsView.tsx | 1197 ---------------------------- components/MetricDetailTooltip.tsx | 21 +- components/WeeklyGrid.tsx | 39 +- components/WeeklyRow.tsx | 96 +-- components/mkt/KPICards.tsx | 74 -- components/mkt/MasterTable.tsx | 286 ------- components/mkt/MktDataView.tsx | 349 -------- components/mkt/WaterfallModal.tsx | 165 ---- components/mkt/data.ts | 140 ---- components/mkt/types.ts | 17 - components/mkt/utils.ts | 48 -- debug_all_asins.ts | 100 --- debug_bodyness_experiment.ts | 243 ------ debug_timestamps.ts | 70 -- services/experimentAnalysis.ts | 541 ------------- services/experiments.ts | 299 ------- test-ads.ts | 57 -- test-iso-weeks.ts | 94 --- test_did.ts | 40 - types.ts | 119 +-- 25 files changed, 11 insertions(+), 4985 deletions(-) delete mode 100644 api/experiments.ts delete mode 100644 api/fetch-mkt-data.ts delete mode 100644 components/ExperimentBadge.tsx delete mode 100644 components/ExperimentTracker.tsx delete mode 100644 components/ExperimentsView.tsx delete mode 100644 components/mkt/KPICards.tsx delete mode 100644 components/mkt/MasterTable.tsx delete mode 100644 components/mkt/MktDataView.tsx delete mode 100644 components/mkt/WaterfallModal.tsx delete mode 100644 components/mkt/data.ts delete mode 100644 components/mkt/types.ts delete mode 100644 components/mkt/utils.ts delete mode 100644 debug_all_asins.ts delete mode 100644 debug_bodyness_experiment.ts delete mode 100644 debug_timestamps.ts delete mode 100644 services/experimentAnalysis.ts delete mode 100644 services/experiments.ts delete mode 100644 test-ads.ts delete mode 100644 test-iso-weeks.ts delete mode 100644 test_did.ts diff --git a/App.tsx b/App.tsx index 0b5db49..734e765 100644 --- a/App.tsx +++ b/App.tsx @@ -6,14 +6,10 @@ import FilterBar from './components/FilterBar'; import AIChat from './components/AIChat'; import CrazeLogo from './components/CrazeLogo'; import { processCSV, processExcel, filterData, aggregateData, processAdsCSV, processAdsExcel, mergeSalesAndAdsData, processTrafficExcel, processStockExcel, filterAdsData, calculateForecastViewData, processVendorStockExcel, processUKInventoryExcel, calculateVelocityMap, getUniqueValues, processForecastExcel, processBuyBoxExcel, processBSRExcel, filterBsrData, isAllowedCustomer, isRealSale } from './services/dataProcessor'; -import { SalesRecord, FilterState, AggregatedData, AdsRecord, TrafficRecord, ForecastRecord, ProductForecastData, ActiveExperiment, BSRRecord } from './types'; +import { SalesRecord, FilterState, AggregatedData, AdsRecord, TrafficRecord, ForecastRecord, ProductForecastData, BSRRecord } from './types'; import { queryGemini } from './services/geminiService'; import { ChartIcon, TableIcon, CloseIcon, TrendingIcon, MegaphoneIcon } from './components/Icons'; import { loadSalesData, saveSalesData, clearSalesData, loadAdsData, saveAdsData, clearAdsData } from './services/storage'; -import { - listExperiments, - getActiveExperiments, -} from './services/experiments'; // Lazy load heavy components for better initial performance const DataGrid = lazy(() => import('./components/DataGrid')); @@ -21,9 +17,6 @@ const WeeklyGrid = lazy(() => import('./components/WeeklyGrid')); const AdsPerformance = lazy(() => import('./components/AdsPerformance')); const ForecastView = lazy(() => import('./components/ForecastView')); const VendorDataView = lazy(() => import('./components/VendorDataView')); -const ExperimentsView = lazy(() => import('./components/ExperimentsView')); -const MktDataView = lazy(() => import('./components/mkt/MktDataView')); - // Loading fallback component const LoadingSpinner = () => ( @@ -51,7 +44,7 @@ const App: React.FC = () => { const [trafficData, setTrafficData] = useState([]); const [loading, setLoading] = useState(true); const [syncing, setSyncing] = useState(false); - const [view, setView] = useState<'dashboard' | 'table' | 'weekly' | 'ads' | 'forecast' | 'vendor' | 'experiments' | 'mkt'>('dashboard'); + const [view, setView] = useState<'dashboard' | 'table' | 'weekly' | 'ads' | 'forecast' | 'vendor'>('dashboard'); const [forecastData, setForecastData] = useState([]); const [isChatOpen, setIsChatOpen] = useState(false); const [activeUrl, setActiveUrl] = useState(() => localStorage.getItem('craze_csv_url') || PERMANENT_DROPBOX_URL); @@ -63,10 +56,6 @@ const App: React.FC = () => { const [buyBoxLostMap, setBuyBoxLostMap] = useState }>>(new Map()); const [bsrData, setBsrData] = useState([]); - // Experiments state - const [experimentMap, setExperimentMap] = useState>(new Map()); - // Experiment modal state removed β€” detail/create are now inline in ExperimentsView - // Modal State const [isDataModalOpen, setIsDataModalOpen] = useState(false); @@ -266,17 +255,6 @@ const App: React.FC = () => { } }, []); - const handleExperimentsFetch = useCallback(async () => { - try { - const expMap = await getActiveExperiments(rawData); - setExperimentMap(expMap); - console.log('[App] Loaded experiments for', expMap.size, 'ASINs'); - } catch (error) { - console.error("Failed to fetch experiments", error); - } - }, [rawData]); - - const handleForecastFetch = useCallback(async (sales: SalesRecord[], globalSales: SalesRecord[], activeFilters: FilterState) => { try { const isUK = activeFilters.customer.includes('Amazon UK'); @@ -356,11 +334,6 @@ const App: React.FC = () => { setView('ads'); }, []); - // Create experiment for a specific line β€” now handled inline by ExperimentsView - const handleCreateExperimentForLine = useCallback((_line: string) => { - setView('experiments'); - }, []); - // 1. Initial Load from Cache (IndexedDB) or Auto-Fetch Permanent URL useEffect(() => { const initApp = async () => { @@ -418,7 +391,6 @@ const App: React.FC = () => { handleStockFetch(), handleVendorStockFetch(), handleBuyBoxFetch(), - handleExperimentsFetch(), handleBSRFetch() ]).catch(e => console.warn("Background fetch failed", e)); @@ -550,15 +522,6 @@ const App: React.FC = () => { const filteredAdsData = useMemo(() => filterAdsData(adsData, deferredFilters, globalAsinMetadata, stockMap, vendorStockMap, top50Mode), [adsData, deferredFilters, globalAsinMetadata, stockMap, vendorStockMap, top50Mode]); console.timeEnd('filteredAdsData'); - const mktAdsData = useMemo(() => adsData.filter(ad => { - const countryMatch = deferredFilters.customer.length === 0 - ? true - : deferredFilters.customer.some(c => c.toUpperCase() === ad.country.toUpperCase()); - const yearMatch = deferredFilters.year.length === 0 || deferredFilters.year.includes(ad.year.toString()); - const weekMatch = deferredFilters.week.length === 0 || deferredFilters.week.includes(`W${ad.week}`); - return countryMatch && yearMatch && weekMatch; - }), [adsData, deferredFilters.customer, deferredFilters.year, deferredFilters.week]); - console.time('aggregatedData'); const aggregatedData = useMemo(() => aggregateData(filteredData), [filteredData]); console.timeEnd('aggregatedData'); @@ -796,13 +759,6 @@ const App: React.FC = () => { > Weekly Sales - - - @@ -901,8 +849,6 @@ const App: React.FC = () => { top50Ranking={top50Ranking2025} velocityMap={velocityMap} buyBoxLostMap={buyBoxLostMap} - experimentMap={experimentMap} - onOpenExperiment={() => setView('experiments')} /> @@ -964,30 +910,6 @@ const App: React.FC = () => { - }> -
- -
-
- - }> -
- -
-
- )} @@ -998,16 +920,14 @@ const App: React.FC = () => { {/* Mobile Bottom Navigation */}