diff --git a/CHANGELOG.md b/CHANGELOG.md index 23bed39ec..84124ad57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ You can also check the - Features - Added a way to create a link column in table charts + - Hidden table columns are not forced anymore to have a single filter ### 6.1.3 - 2025-11-12 diff --git a/app/charts/index.ts b/app/charts/index.ts index 2f18b8078..a33bb0a9c 100644 --- a/app/charts/index.ts +++ b/app/charts/index.ts @@ -37,7 +37,6 @@ import { Filters, GenericChartConfig, GenericField, - GenericFields, InteractiveFiltersConfig, isColorInConfig, isSegmentInConfig, @@ -2959,22 +2958,6 @@ export const getFieldComponentIds = (fields: ChartConfig["fields"]) => { ); }; -export const getGroupedFieldIds = (fields: GenericFields) => { - return new Set( - Object.values(fields).flatMap((f) => - f && (f as $IntentionalAny).isGroup ? [f.componentId] : [] - ) - ); -}; - -export const getHiddenFieldIds = (fields: GenericFields) => { - return new Set( - Object.values(fields).flatMap((f) => - f && (f as $IntentionalAny).isHidden ? [f.componentId] : [] - ) - ); -}; - export const getFieldComponentId = ( fields: ChartConfig["fields"], field: string diff --git a/app/configurator/components/filters.tsx b/app/configurator/components/filters.tsx index 285eea82a..364b1ddee 100644 --- a/app/configurator/components/filters.tsx +++ b/app/configurator/components/filters.tsx @@ -60,10 +60,8 @@ import { DRAWER_WIDTH, } from "@/configurator/components/drawers"; import { - dimensionToFieldProps, MultiFilterField, ShowValuesMappingField, - SingleFilterField, } from "@/configurator/components/field"; import { canRenderDatePickerField, @@ -104,7 +102,6 @@ import { sortHierarchy, } from "@/rdf/tree-utils"; import { interlace } from "@/utils/interlace"; -import { valueComparator } from "@/utils/sorting-values"; import { getTimeFilterOptions } from "@/utils/time-filter-options"; import { useEvent } from "@/utils/use-event"; @@ -1419,32 +1416,3 @@ const InteractiveTimeRangeToggle = () => { /> ); }; - -export const DimensionValuesSingleFilter = ({ - dimension, -}: { - dimension: Component; -}) => { - const locale = useLocale(); - const sortedDimensionValues = useMemo(() => { - const values = dimension.values; - return [...values].sort(valueComparator(locale)); - }, [dimension?.values, locale]); - - return dimension ? ( - <> - {sortedDimensionValues.map((d) => { - return ( - - ); - })} - - ) : ( - - ); -}; diff --git a/app/configurator/configurator-state/reducer.spec.tsx b/app/configurator/configurator-state/reducer.spec.tsx index c282d894e..b4cd059d9 100644 --- a/app/configurator/configurator-state/reducer.spec.tsx +++ b/app/configurator/configurator-state/reducer.spec.tsx @@ -378,72 +378,6 @@ describe("applyDimensionToFilters", () => { }); describe("applyTableDimensionToFilters", () => { - it("should set single value filter for a keyDimension if hidden and not grouped", () => { - const initialFilters = {}; - const expectedFilters = { - "https://environment.ld.admin.ch/foen/ubd0104/parametertype": { - type: "single", - value: "E.coli", - }, - }; - - applyTableDimensionToFilters({ - filters: initialFilters, - dimension: keyDimension, - isHidden: true, - isGrouped: false, - cubeIri: "https://environment.ld.admin.ch/foen/ubd0104", - }); - - expect(initialFilters).toEqual(expectedFilters); - }); - - it("should not modify filter for an optionalDimension if hidden and not grouped", () => { - const initialFilters = { - "https://environment.ld.admin.ch/foen/ubd0104/parametertype": { - type: "multi", - values: { "E.coli": true, Enterokokken: true }, - }, - } as any; - const expectedFilters = { - "https://environment.ld.admin.ch/foen/ubd0104/parametertype": { - type: "multi", - values: { "E.coli": true, Enterokokken: true }, - }, - }; - - applyTableDimensionToFilters({ - filters: initialFilters, - dimension: optionalDimension, - isHidden: true, - isGrouped: false, - cubeIri: "https://environment.ld.admin.ch/foen/ubd0104", - }); - - expect(initialFilters).toEqual(expectedFilters); - }); - - it("should not set single value filter for a keyDimension if hidden and range", () => { - const initialFilters = { - "https://environment.ld.admin.ch/foen/ubd0104/parametertype": { - from: "2007-05-21", - to: "2020-09-28", - type: "range", - }, - } as any; - const expectedFilters = { ...initialFilters }; - - applyTableDimensionToFilters({ - filters: initialFilters, - dimension: keyDimension, - isHidden: true, - isGrouped: false, - cubeIri: "https://environment.ld.admin.ch/foen/ubd0104", - }); - - expect(initialFilters).toEqual(expectedFilters); - }); - it("should not modify filters for a keyDimension if not hidden and grouped", () => { const initialFilters = { "https://environment.ld.admin.ch/foen/ubd0104/parametertype": { @@ -461,8 +395,6 @@ describe("applyDimensionToFilters", () => { applyTableDimensionToFilters({ filters: initialFilters, dimension: keyDimension, - isHidden: false, - isGrouped: true, cubeIri: "https://environment.ld.admin.ch/foen/ubd0104", }); diff --git a/app/configurator/configurator-state/reducer.tsx b/app/configurator/configurator-state/reducer.tsx index b904a97e7..7fb226c6a 100644 --- a/app/configurator/configurator-state/reducer.tsx +++ b/app/configurator/configurator-state/reducer.tsx @@ -16,8 +16,6 @@ import { Reducer } from "use-immer"; import { getChartConfigAdjustedToChartType, getFieldComponentIds, - getGroupedFieldIds, - getHiddenFieldIds, } from "@/charts"; import { getChartFieldChangeSideEffect, @@ -116,10 +114,6 @@ export const deriveFiltersFromFields = produce( if (draft.chartType === "table") { // As dimensions in tables behave differently than in other chart types, // they need to be handled in a different way. - const hiddenFieldIds = getHiddenFieldIds(draft.fields); - const groupedDimensionIds = getGroupedFieldIds(draft.fields); - const isHidden = (dim: Dimension) => hiddenFieldIds.has(dim.id); - const isGrouped = (dim: Dimension) => groupedDimensionIds.has(dim.id); draft.cubes.forEach((cube) => { const cubeDimensions = getCubeDimensions(dimensions, cube.iri); cubeDimensions.forEach((dim) => { @@ -127,9 +121,6 @@ export const deriveFiltersFromFields = produce( cubeIri: cube.iri, filters: cube.filters, dimension: dim, - isHidden: isHidden(dim), - isGrouped: isGrouped(dim), - possibleFilter: possibleFilters?.find((f) => f.id === dim.id), }); }); }); @@ -159,52 +150,33 @@ export const deriveFiltersFromFields = produce( } ); -export const applyTableDimensionToFilters = (props: { +export const applyTableDimensionToFilters = ({ + cubeIri, + filters, + dimension, +}: { cubeIri: string; filters: Filters; dimension: Dimension; - isHidden: boolean; - isGrouped: boolean; - possibleFilter?: PossibleFilterValue; }) => { - const { filters, dimension, isHidden, isGrouped, possibleFilter, cubeIri } = - props; const originalIri = isJoinByComponent(dimension) ? dimension.originalIds.find((c) => c.cubeIri === cubeIri)?.dimensionId : dimension.id; assert(originalIri !== undefined, "Dimension should have an IRI"); const currentFilter = filters[originalIri]; - const shouldBecomeSingleFilter = isHidden && !isGrouped; if (currentFilter) { switch (currentFilter.type) { case "single": - if (!shouldBecomeSingleFilter) { - delete filters[originalIri]; - } + delete filters[originalIri]; break; case "multi": - if (shouldBecomeSingleFilter && dimension.isKeyDimension) { - filters[originalIri] = { - type: "single", - value: - Object.keys(currentFilter.values)[0] ?? dimension.values[0].value, - }; - } - break; case "range": break; default: const _exhaustiveCheck: never = currentFilter; return _exhaustiveCheck; } - } else if (shouldBecomeSingleFilter && dimension.isKeyDimension) { - filters[originalIri] = { - type: "single", - // TODO, possibly in case of join by dimensions, we could get a value that is not part - // of the full range of values - value: possibleFilter?.value ?? dimension.values[0].value, - }; } }; diff --git a/app/configurator/table/table-chart-options.tsx b/app/configurator/table/table-chart-options.tsx index e186c23a5..7675b9842 100644 --- a/app/configurator/table/table-chart-options.tsx +++ b/app/configurator/table/table-chart-options.tsx @@ -26,7 +26,6 @@ import { } from "@/configurator/components/field"; import { DimensionValuesMultiFilter, - DimensionValuesSingleFilter, TimeFilter, } from "@/configurator/components/filters"; import { mapValueIrisToColor } from "@/configurator/components/ui-helpers"; @@ -340,16 +339,12 @@ export const TableColumnOptions = ({ Filter - {component.isKeyDimension && isHidden && !isGroup ? ( - - ) : ( - - )} + ) : null}