diff --git a/App.tsx b/App.tsx index d904ed5..17bf791 100644 --- a/App.tsx +++ b/App.tsx @@ -1,11 +1,7 @@ -import React, { useState, useMemo, useEffect, useCallback } from 'react'; +import React, { useState, useMemo, useEffect, useCallback, Suspense, lazy } from 'react'; import FileUpload from './components/FileUpload'; import Dashboard from './components/Dashboard'; -import DataGrid from './components/DataGrid'; -import WeeklyGrid from './components/WeeklyGrid'; -import TopMovers from './components/TopMovers'; -// import AdvertisingDashboard from './components/AdvertisingDashboard'; // Removed import FilterBar from './components/FilterBar'; import AIChat from './components/AIChat'; import CrazeLogo from './components/CrazeLogo'; @@ -15,6 +11,18 @@ import { queryGemini } from './services/geminiService'; import { ChartIcon, TableIcon, UploadIcon, DownloadIcon, CloseIcon, TrendingIcon } from './components/Icons'; import { loadSalesData, saveSalesData, clearSalesData, loadAdsData, saveAdsData, clearAdsData } from './services/storage'; +// Lazy load heavy components for better initial performance +const DataGrid = lazy(() => import('./components/DataGrid')); +const WeeklyGrid = lazy(() => import('./components/WeeklyGrid')); +const TopMovers = lazy(() => import('./components/TopMovers')); + +// Loading fallback component +const LoadingSpinner = () => ( +
+
+
+); + // New Refresh Icon const RefreshIcon = ({ className }: { className?: string }) => ( @@ -417,9 +425,11 @@ const App: React.FC = () => { adsData={filteredAdsData} /> )} - {view === 'table' && 0} adsData={filteredAdsData} />} - {view === 'weekly' && } - {view === 'movers' && } + }> + {view === 'table' && 0} adsData={filteredAdsData} />} + {view === 'weekly' && } + {view === 'movers' && } + )}