diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx index 17079a9..d8b64b2 100644 --- a/src/components/Dashboard.tsx +++ b/src/components/Dashboard.tsx @@ -83,6 +83,7 @@ function Dashboard({ data, seasons, userRole, showDataLabels, setShowDataLabels, const [eventChartType, setEventChartType] = useState<'bar' | 'pie'>('pie'); const [channelChartType, setChannelChartType] = useState<'bar' | 'pie'>('pie'); const [channelDisplayMode, setChannelDisplayMode] = useState<'absolute' | 'percent'>('absolute'); + const [eventDisplayMode, setEventDisplayMode] = useState<'absolute' | 'percent'>('absolute'); const filteredData = useMemo(() => filterData(data, filters), [data, filters]); @@ -254,6 +255,17 @@ function Dashboard({ data, seasons, userRole, showDataLabels, setShowDataLabels, }; }, [seasonFilteredData, includeVAT]); + const eventChartData = useMemo(() => { + const source = museumData[eventMetric]; + if (eventDisplayMode === 'absolute') return source; + const total = source.datasets[0].data.reduce((s: number, v: number) => s + v, 0); + if (total === 0) return source; + return { + ...source, + datasets: [{ ...source.datasets[0], data: source.datasets[0].data.map((v: number) => parseFloat(((v / total) * 100).toFixed(1))) }] + }; + }, [museumData, eventMetric, eventDisplayMode]); + const channelChartData = useMemo(() => { if (channelDisplayMode === 'absolute') return channelData; const total = channelData.datasets[0].data.reduce((s: number, v: number) => s + v, 0); @@ -639,12 +651,25 @@ function Dashboard({ data, seasons, userRole, showDataLabels, setShowDataLabels, +