import React, { Suspense, lazy, useState } from "react"; import ErrorBoundary from "./components/boundaries/ErrorBoundary"; import "./App.css"; import LoadingState from "./components/common/LoadingState"; import StatusBanner from "./components/common/StatusBanner"; import AppHeader from "./components/layout/AppHeader"; import DatasetMetaPanel from "./components/layout/DatasetMetaPanel"; import KpiOverview from "./components/overview/KpiOverview"; import StackOverflowKpiOverview from "./components/overview/StackOverflowKpiOverview"; import { useMarketplaceDataset } from "./hooks/useMarketplaceDataset"; import { useProductHuntDataset } from "./hooks/useProductHuntDataset"; import { DATASET_PATH } from "./config/appConfig"; /* ================= CHART IMPORTS ================= */ // Demographics const DevelopersByCountryBar = lazy(() => import("./charts/DevelopersByCountryBar") ); const AgeDistributionHistogram = lazy(() => import("./charts/AgeDistributionHistogram") ); const GenderDistributionDonut = lazy(() => import("./charts/GenderDistributionDonut") ); // Experience & Career const CodingExperienceHistogram = lazy(() => import("./charts/CodingExperienceHistogram") ); const DeveloperRolesChart = lazy(() => import("./charts/DeveloperRolesChart")); const SalaryByRoleChart = lazy(() => import("./charts/SalaryByRoleChart")); const RemoteWorkVsSalaryBoxPlot = lazy(() => import("./charts/RemoteWorkVsSalaryBoxPlot") ); // Education & Work Style const EducationLevelBarChart = lazy(() => import("./charts/EducationLevelBarChart") ); const RemoteWorkPreferencePieChart = lazy(() => import("./charts/RemoteWorkPreferencePieChart") ); const OrgSizeVsRemoteWorkChart = lazy(() => import("./charts/OrgSizeVsRemoteWorkChart") ); // Technology Usage const MostUsedLanguagesChart = lazy(() => import("./charts/MostUsedLanguagesChart") ); const LanguagesUsedVsAdmiredChart = lazy(() => import("./charts/LanguagesUsedVsAdmiredChart") ); const MostUsedDatabasesChart = lazy(() => import("./charts/MostUsedDatabasesChart") ); const DatabasesHaveVsWantChart = lazy(() => import("./charts/DatabasesHaveVsWantChart") ); const PlatformsDevelopersWorkWithChart = lazy(() => import("./charts/PlatformsDevelopersWorkWithChart") ); const PlatformsHaveVsWantChart = lazy(() => import("./charts/PlatformsHaveVsWantChart") ); // AI & Community const ExperienceVsAIUsageChart = lazy(() => import("./charts/ExperienceVsAIUsageChart") ); const StackOverflowChart = lazy(() => import("./charts/StackOverflowChart")); export default function App() { const [showFields, setShowFields] = useState(false); const { metadata, status, error, hasData, refresh } = useMarketplaceDataset(DATASET_PATH); const productHuntData = useProductHuntDataset(DATASET_PATH); const initialLoading = status === "loading" && !hasData; const initialError = status === "error" && !hasData; return (