Refactor DashboardFilterBar to use props exclusively, eliminate dual state source

- DashboardFilterBar now requires all filter props (timeRange, onTimeRangeChange, originFilter, onOriginFilterChange) instead of falling back to context
- Removed useDashboardFilters() hook dependency from DashboardFilterBar, BanTrendChart, and JailDistributionChart
- Updated DashboardPage to explicitly pass all filter values and callbacks from context to components
- Made props required on BanTrendChart and JailDistributionChart
- Updated all tests to reflect new prop requirements
- This eliminates the silent dual-source behavior that could lead to subtle bugs when components are used with different data sources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-04-23 09:24:16 +02:00
parent 10c534d090
commit 814000fe68
7 changed files with 58 additions and 84 deletions

View File

@@ -4,9 +4,19 @@ import userEvent from "@testing-library/user-event";
import { DashboardFilterBar } from "../../components/DashboardFilterBar";
import { DashboardFilterProvider, useDashboardFilters } from "../DashboardFilterProvider";
function DashboardFilterSummary(): React.JSX.Element {
const { timeRange, originFilter } = useDashboardFilters();
return <div data-testid="dashboard-filters">{`${timeRange}-${originFilter}`}</div>;
function DashboardFilterContent(): React.JSX.Element {
const { timeRange, originFilter, setTimeRange, setOriginFilter } = useDashboardFilters();
return (
<>
<DashboardFilterBar
timeRange={timeRange}
onTimeRangeChange={setTimeRange}
originFilter={originFilter}
onOriginFilterChange={setOriginFilter}
/>
<div data-testid="dashboard-filters">{`${timeRange}-${originFilter}`}</div>
</>
);
}
describe("DashboardFilterProvider", () => {
@@ -15,8 +25,7 @@ describe("DashboardFilterProvider", () => {
render(
<DashboardFilterProvider>
<DashboardFilterBar />
<DashboardFilterSummary />
<DashboardFilterContent />
</DashboardFilterProvider>,
);