diff --git a/app/src/app/components/sidebar/Evaluation.tsx b/app/src/app/components/sidebar/Evaluation.tsx
index 3704b9cd..e3bfe030 100644
--- a/app/src/app/components/sidebar/Evaluation.tsx
+++ b/app/src/app/components/sidebar/Evaluation.tsx
@@ -10,7 +10,7 @@ import {
P4ZoneSummaryStats,
P4ZoneSummaryStatsKeys,
} from '@/app/utils/api/apiHandlers';
-import {Button, CheckboxGroup} from '@radix-ui/themes';
+import {Button, CheckboxGroup, Heading} from '@radix-ui/themes';
import {Flex, Spinner, Text} from '@radix-ui/themes';
import {queryClient} from '@utils/api/queryClient';
import {formatNumber, NumberFormats} from '@/app/utils/numbers';
@@ -100,7 +100,6 @@ const Evaluation: React.FC = () => {
const totPop = useMapStore(state => state.summaryStats.totpop?.data);
const mapDocument = useMapStore(state => state.mapDocument);
const assignmentsHash = useMapStore(state => state.assignmentsHash);
-
const columnConfig = useMemo(() => {
const summaryType = mapDocument?.available_summary_stats?.[0];
@@ -139,6 +138,7 @@ const Evaluation: React.FC = () => {
queryClient
);
+
const {
unassigned,
maxValues,
@@ -155,6 +155,7 @@ const Evaluation: React.FC = () => {
zone: -999,
total: getEntryTotal(totPop),
};
+
ZoneSummaryStatsKeys.forEach(key => {
let total = unassigned[key];
maxValues[key] = -Math.pow(10, 12);
@@ -164,7 +165,7 @@ const Evaluation: React.FC = () => {
// @ts-ignore
maxValues[key] = Math.max(row[key], maxValues[key]);
});
- unassigned[`${key}_pct`] = total / unassigned[key];
+ unassigned[`${key}_pct`] = total / unassigned['total'];
unassigned[key] = total;
});
@@ -189,7 +190,10 @@ const Evaluation: React.FC = () => {
const rows = unassigned && showUnassigned ? [...data.results, unassigned] : data.results;
return (
-
+
+ Voting age population
+
+
{modeButtonConfig.map((mode, i) => (
},
- {mode: 'brush', disabled: false, label: 'Brush', icon: },
+ {mode: 'brush', disabled: false, label: 'Paint', icon: },
{mode: 'eraser', disabled: false, label: 'Erase', icon: },
{
mode: 'shatter',
diff --git a/app/src/app/components/sidebar/PaintByCounty.tsx b/app/src/app/components/sidebar/PaintByCounty.tsx
index 78c72c93..f9db964f 100644
--- a/app/src/app/components/sidebar/PaintByCounty.tsx
+++ b/app/src/app/components/sidebar/PaintByCounty.tsx
@@ -39,9 +39,6 @@ export default function PaintByCounty() {
Paint by County
-
- Paint-by-county feature is still experimental.
-
);
}
diff --git a/app/src/app/components/sidebar/charts/HorizontalBarChart.tsx b/app/src/app/components/sidebar/charts/HorizontalBarChart.tsx
index 2e2a4f43..4b23b06b 100644
--- a/app/src/app/components/sidebar/charts/HorizontalBarChart.tsx
+++ b/app/src/app/components/sidebar/charts/HorizontalBarChart.tsx
@@ -13,7 +13,7 @@ import {
} from 'recharts';
import {colorScheme} from '@/app/constants/colors';
import {useState, useMemo} from 'react';
-import { formatNumber } from '@/app/utils/numbers';
+import {formatNumber} from '@/app/utils/numbers';
type TooltipInput = {
active?: boolean;
@@ -25,7 +25,7 @@ const calculateMinMaxRange = (data: Array<{zone: number; total_pop: number}>) =>
const min = Math.min(...totalPops);
const max = Math.max(...totalPops);
const range = Math.abs(max - min);
- return { min, max, range };
+ return {min, max, range};
};
const numberFormat = new Intl.NumberFormat('en-US');
@@ -47,7 +47,7 @@ export const HorizontalBar = () => {
const summaryStats = useMapStore(state => state.summaryStats);
const numDistricts = useMapStore(state => state.mapDocument?.num_districts);
const idealPopulation = summaryStats?.idealpop?.data;
- const lockPaintedAreas = useMapStore(state => state.mapOptions.lockPaintedAreas)
+ const lockPaintedAreas = useMapStore(state => state.mapOptions.lockPaintedAreas);
const maxNumberOrderedBars = 40; // max number of zones to consider while keeping blank spaces for missing zones
const [totalExpectedBars, setTotalExpectedBars] = useState<
Array<{zone: number; total_pop: number}>
@@ -74,10 +74,10 @@ export const HorizontalBar = () => {
const stats = useMemo(() => {
if (mapMetrics) {
const chartObject = calculateChartObject();
- const allAreNonZero = chartObject.every(entry => entry.total_pop > 0)
- const stats = allAreNonZero ? calculateMinMaxRange(chartObject) : undefined
+ const allAreNonZero = chartObject.every(entry => entry.total_pop > 0);
+ const stats = allAreNonZero ? calculateMinMaxRange(chartObject) : undefined;
setTotalExpectedBars(chartObject);
- return stats
+ return stats;
}
}, [mapMetrics]);
@@ -100,7 +100,7 @@ export const HorizontalBar = () => {
return (
- Population by district
+ Total population by district
{
))}
-
- {stats?.range !== undefined &&
- Top-to-bottom deviation: {formatNumber(stats.range || 0, 'string')}
- }
+
+ {stats?.range !== undefined
+ ? `Top-to-bottom deviation: ${formatNumber(stats.range || 0, 'string')}`
+ : 'Top-to-bottom population deviation will appear when all districts are started'}
+
);
};
+const getRenderCustomBarLabel: (
+ lockPaintedAreas: MapStore['mapOptions']['lockPaintedAreas']
+) => React.FC = lockPaintedAreas => {
+ const InnerComponent: React.FC = ({y, height, index, value}) => {
+ const entryIsLocked =
+ Array.isArray(lockPaintedAreas) && lockPaintedAreas.indexOf(index + 1) !== -1;
-const getRenderCustomBarLabel: (lockPaintedAreas: MapStore['mapOptions']['lockPaintedAreas']) => React.FC = (lockPaintedAreas) => {
- const InnerComponent: React.FC = ({ y, height, index, value }) => {
- const entryIsLocked = Array.isArray(lockPaintedAreas) && lockPaintedAreas.indexOf(index+1) !== -1
-
if (!entryIsLocked || !value) {
- return null
+ return null;
}
- return
-
- ;
- }
- return InnerComponent
-}
\ No newline at end of file
+ return (
+
+
+
+ );
+ };
+ return InnerComponent;
+};