From 75327d49fd5120b2f86518aff07a6c00b958c6b0 Mon Sep 17 00:00:00 2001 From: Birk Johansson Date: Fri, 18 Oct 2024 14:16:46 +0200 Subject: [PATCH] fix(categoryOptionCombo): add ignoreApproval to list, update viewConfig --- .../sectionList/filters/DynamicFilters.tsx | 10 ++++++---- .../sectionList/filters/filterSelectors/index.ts | 1 + src/lib/sectionList/filters/filterConfig.tsx | 12 +++++++++++- .../sectionList/listViews/sectionListViewsConfig.ts | 13 +++++++++++++ src/types/utility.ts | 4 ++++ 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/components/sectionList/filters/DynamicFilters.tsx b/src/components/sectionList/filters/DynamicFilters.tsx index e8c66bbe..a8fc18aa 100644 --- a/src/components/sectionList/filters/DynamicFilters.tsx +++ b/src/components/sectionList/filters/DynamicFilters.tsx @@ -3,13 +3,14 @@ import { ConfigurableFilterKey } from './../../../lib' import { AggregationTypeFilter, CategoryComboFilter, + Categoryfilter, + CategoryOptionGroupFilter, + DataDimensionTypeFilter, DataSetFilter, DomainTypeSelectionFilter, - ValueTypeSelectionFilter, + IgnoreApprovalFilter, PublicAccessFilter, - DataDimensionTypeFilter, - Categoryfilter, - CategoryOptionGroupFilter, + ValueTypeSelectionFilter, } from './filterSelectors' import { useFilterKeys } from './useFilterKeys' @@ -25,6 +26,7 @@ const filterKeyToComponentMap: FilterKeyToComponentMap = { aggregationType: AggregationTypeFilter, publicAccess: PublicAccessFilter, dataDimensionType: DataDimensionTypeFilter, + ignoreApproval: IgnoreApprovalFilter, } export const DynamicFilters = () => { diff --git a/src/components/sectionList/filters/filterSelectors/index.ts b/src/components/sectionList/filters/filterSelectors/index.ts index f6b09ff6..0242e9c9 100644 --- a/src/components/sectionList/filters/filterSelectors/index.ts +++ b/src/components/sectionList/filters/filterSelectors/index.ts @@ -6,3 +6,4 @@ export * from './ConstantSelectionFilter' export * from './PublicAccessFilter' export * from './CategoryFilter' export * from './CategoryOptionGroupFilter' +export * from './BooleanFilters' diff --git a/src/lib/sectionList/filters/filterConfig.tsx b/src/lib/sectionList/filters/filterConfig.tsx index fafb00eb..3fb43945 100644 --- a/src/lib/sectionList/filters/filterConfig.tsx +++ b/src/lib/sectionList/filters/filterConfig.tsx @@ -1,9 +1,10 @@ -import { StringParam } from 'use-query-params' +import { StringParam, BooleanParam } from 'use-query-params' import { z } from 'zod' import { Category, DataElement } from '../../../types/generated' import { IDENTIFIABLE_FILTER_KEY } from '../../constants' import { isValidUid, parseAccessString } from '../../models' import { CustomDelimitedArrayParam } from './customParams' +import { KeysOfValue } from '../../../types/utility' const zodArrayIds = z.array(z.string().refine((val) => isValidUid(val))) @@ -22,6 +23,7 @@ export const filterParamsSchema = z ), valueType: z.array(z.nativeEnum(DataElement.valueType)), dataDimensionType: z.nativeEnum(Category.dataDimensionType), + ignoreApproval: z.boolean(), }) .partial() @@ -38,6 +40,7 @@ export const filterQueryParamType = { categoryOptionGroup: CustomDelimitedArrayParam, publicAccess: CustomDelimitedArrayParam, dataDimensionType: StringParam, + ignoreApproval: BooleanParam, } as const satisfies QueryParamsConfigMap export const validFilterKeys = Object.keys(filterQueryParamType) @@ -47,6 +50,8 @@ export type ParsedFilterParams = z.infer type MapZodTypeToQueryParamConfig = TZodResultType extends string ? typeof StringParam + : TZodResultType extends boolean + ? typeof BooleanParam : typeof CustomDelimitedArrayParam /* Type is just used to verify that the ParamType-config matches the zod schema @@ -64,4 +69,9 @@ export type ConfigurableFilterKey = Exclude< typeof IDENTIFIABLE_FILTER_KEY > +export type BooleanFilterKey = KeysOfValue< + ParsedFilterParams, + boolean | undefined +> + export type FilterKeys = FilterKey[] diff --git a/src/lib/sectionList/listViews/sectionListViewsConfig.ts b/src/lib/sectionList/listViews/sectionListViewsConfig.ts index 4b28a174..00c64ee6 100644 --- a/src/lib/sectionList/listViews/sectionListViewsConfig.ts +++ b/src/lib/sectionList/listViews/sectionListViewsConfig.ts @@ -137,6 +137,19 @@ export const modelListViewsConfig = { }, filters: { default: ['dataDimensionType', 'category'], + available: ['ignoreApproval'], + }, + }, + categoryOptionCombo: { + columns: { + default: ['name', 'code', 'lastUpdated'], + overrideDefaultAvailable: true, + available: ['categoryCombo', 'ignoreApproval'], + }, + filters: { + default: ['categoryCombo'], + available: ['ignoreApproval'], + overrideDefaultAvailable: true, }, }, } satisfies SectionListViewConfig diff --git a/src/types/utility.ts b/src/types/utility.ts index 74b22519..41d3a3e4 100644 --- a/src/types/utility.ts +++ b/src/types/utility.ts @@ -1 +1,5 @@ export type * from './generated/utility' + +export type KeysOfValue = keyof { + [K in keyof T as T[K] extends TCondition ? K : never]: K +}