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 */}