Skip to content

Stakeholder Map

import { useState, useMemo } from “react”; import { useQuery } from “@tanstack/react-query”; import { base44 } from “@/api/base44Client”; import Header from “../components/Header”; import USMap from “../components/USMap”; import StateDetail from “../components/StateDetail”; import CompareStates from “../components/CompareStates”; import SectionToggle from “../components/SectionToggle”; import { MapPin } from “lucide-react”; export default function Home() { const [selectedState, setSelectedState] = useState(null); const [compareMode, setCompareMode] = useState(false); const [compareStates, setCompareStates] = useState([]); const [activeSection, setActiveSection] = useState(“overall”); const { data: states = [] } = useQuery({ queryKey: [“states”], queryFn: () => base44.entities.State.list(), staleTime: 0, gcTime: 0, refetchOnMount: “always”, }); const stateDataMap = useMemo(() => { const map = {}; states.forEach((s) => { map[s.name] = s; }); return map; }, [states]); const categoryField = { overall: “category”, section1: “category_section1”, section2: “category_section2”, section3: “category_section3”, section4: “category_section4”, }[activeSection]; const stateCategories = useMemo(() => { const cats = {}; states.forEach((s) => { const val = s[categoryField]; if (val) cats[s.name] = val; }); return cats; }, [states, categoryField]); const handleStateClick = (stateName) => { if (compareMode) { setCompareStates((prev) => prev.includes(stateName) ? prev.filter((s) => s !== stateName) : prev.length < 3 ? [...prev, stateName] : prev ); } else { setSelectedState(stateName === selectedState ? null : stateName); } }; const handleToggleCompare = () => { if (compareMode) { setCompareMode(false); setCompareStates([]); } else { setCompareMode(true); setSelectedState(null); } }; const selectedForMap = compareMode ? compareStates : selectedState ? [selectedState] : []; return (
{!compareMode && !selectedState && (

Select a State to Begin

Click any state on the map above to view its detailed policy analysis across all four sections — or enable Compare Mode to evaluate multiple states side-by-side.

)} {!compareMode && selectedState && ( setSelectedState(null)} activeSection={activeSection} /> )} {compareMode && ( setCompareStates((prev) => prev.filter((x) => x !== s)) } activeSection={activeSection} /> )}
); }