Skip to content

Commit 6fbe42c

Browse files
committed
refactor: Clean up
1 parent a77c01c commit 6fbe42c

1 file changed

Lines changed: 37 additions & 41 deletions

File tree

app/charts/shared/chart-data-filters.tsx

Lines changed: 37 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import {
4040
import { useTimeFormatLocale } from "@/formatters";
4141
import { useDataCubesComponentsQuery } from "@/graphql/hooks";
4242
import {
43-
DataCubeObservationFilter,
4443
PossibleFiltersDocument,
4544
PossibleFiltersQuery,
4645
PossibleFiltersQueryVariables,
@@ -52,6 +51,7 @@ import {
5251
useChartInteractiveFilters,
5352
useInteractiveFiltersGetState,
5453
} from "@/stores/interactive-filters";
54+
import { assert } from "@/utils/assert";
5555
import { hierarchyToOptions } from "@/utils/hierarchy";
5656
import useEvent from "@/utils/use-event";
5757

@@ -69,8 +69,9 @@ export const useChartDataFiltersState = ({
6969
dataSource: DataSource;
7070
chartConfig: ChartConfig;
7171
}) => {
72-
const componentIris = chartConfig.interactiveFiltersConfig?.dataFilters
73-
.componentIris as string[];
72+
const componentIris =
73+
chartConfig.interactiveFiltersConfig?.dataFilters.componentIris;
74+
assert(componentIris, "Data filters are not enabled for this chart.");
7475
const [open, setOpen] = useState(false);
7576
useEffect(() => {
7677
if (componentIris.length === 0) {
@@ -83,29 +84,25 @@ export const useChartDataFiltersState = ({
8384
allowNoneValues: true,
8485
componentIris,
8586
});
86-
const preparedFilters: PreparedFilter[] | undefined = useMemo(() => {
87+
const preparedFilters = useMemo(() => {
8788
return chartConfig.cubes.map((cube) => {
88-
const cubeQueryFilters = queryFilters.find(
89-
(d) => d.iri === cube.iri
90-
) as DataCubeObservationFilter;
89+
const cubeQueryFilters = queryFilters.find((d) => d.iri === cube.iri);
90+
assert(cubeQueryFilters, "Cube query filters not found.");
9191
const filtersByMappingStatus = getFiltersByMappingStatus(chartConfig, {
9292
cubeIri: cube.iri,
9393
});
9494
const { unmappedFilters, mappedFilters } = filtersByMappingStatus;
9595
const unmappedKeys = Object.keys(unmappedFilters);
96-
const unmappedFiltersArray = Object.entries(
96+
const unmappedEntries = Object.entries(
9797
cubeQueryFilters.filters as Filters
9898
).filter(([k]) => unmappedKeys.includes(k));
99-
const interactiveFiltersArray = unmappedFiltersArray.filter(([k]) =>
99+
const interactiveFiltersList = unmappedEntries.filter(([k]) =>
100100
componentIris.includes(k)
101101
);
102-
103102
return {
104103
cubeIri: cube.iri,
105-
interactiveFilters: Object.fromEntries(interactiveFiltersArray),
106-
unmappedFilters: Object.fromEntries(
107-
unmappedFiltersArray
108-
) as SingleFilters,
104+
interactiveFilters: Object.fromEntries(interactiveFiltersList),
105+
unmappedFilters: Object.fromEntries(unmappedEntries) as SingleFilters,
109106
mappedFilters,
110107
};
111108
});
@@ -214,44 +211,43 @@ export const ChartDataFiltersList = (
214211
gridTemplateColumns: "repeat(auto-fit, minmax(240px, 1fr))",
215212
}}
216213
>
217-
{preparedFilters?.map(({ cubeIri, interactiveFilters }) =>
218-
Object.keys(interactiveFilters).map((dimensionIri) => (
219-
<DataFilter
220-
key={dimensionIri}
221-
cubeIri={cubeIri}
222-
dimensionIri={dimensionIri}
223-
dataSource={dataSource}
224-
chartConfig={chartConfig}
225-
dataFilters={dataFilters}
226-
interactiveFilters={interactiveFilters}
227-
disabled={loading}
228-
/>
229-
))
230-
)}
214+
{preparedFilters.map(({ cubeIri, interactiveFilters }) => {
215+
return Object.keys(interactiveFilters).map((dimensionIri) => {
216+
return (
217+
<DataFilter
218+
key={dimensionIri}
219+
cubeIri={cubeIri}
220+
dimensionIri={dimensionIri}
221+
dataSource={dataSource}
222+
chartConfig={chartConfig}
223+
dataFilters={dataFilters}
224+
interactiveFilters={interactiveFilters}
225+
disabled={loading}
226+
/>
227+
);
228+
});
229+
})}
231230
</Box>
232231
) : null;
233232
};
234233

235-
type DataFilterProps = {
234+
const DataFilter = ({
235+
cubeIri,
236+
dimensionIri,
237+
dataSource,
238+
chartConfig,
239+
dataFilters,
240+
interactiveFilters,
241+
disabled,
242+
}: {
236243
cubeIri: string;
237244
dimensionIri: string;
238245
dataSource: DataSource;
239246
chartConfig: ChartConfig;
240247
dataFilters: DataFilters;
241248
interactiveFilters: Filters;
242249
disabled: boolean;
243-
};
244-
245-
const DataFilter = (props: DataFilterProps) => {
246-
const {
247-
cubeIri,
248-
dimensionIri,
249-
dataSource,
250-
chartConfig,
251-
dataFilters,
252-
interactiveFilters,
253-
disabled,
254-
} = props;
250+
}) => {
255251
const locale = useLocale();
256252
const filters = useChartConfigFilters(chartConfig);
257253
const chartLoadingState = useLoadingState();

0 commit comments

Comments
 (0)