From f31c5885b36c6ddddc25122b056ad1a8d0781817 Mon Sep 17 00:00:00 2001 From: Kai Rollmann Date: Thu, 27 Aug 2026 12:55:31 +0200 Subject: [PATCH] fix(frontend): resolve history search filters via searchConnector --- frontend/src/js/api/types.ts | 3 ++- .../src/js/entity-history/SearchEntities.tsx | 24 +++++++++---------- frontend/src/js/entity-history/reducer.ts | 3 +++ 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/frontend/src/js/api/types.ts b/frontend/src/js/api/types.ts index ede8355127..fcd7688e06 100644 --- a/frontend/src/js/api/types.ts +++ b/frontend/src/js/api/types.ts @@ -540,7 +540,8 @@ export interface HistorySources { export type GetEntityHistoryDefaultParamsResponse = HistorySources & { searchConcept: string | null; // concept id - searchFilters?: string[]; // allowlisted filter ids within the searchConcept + searchConnector: string | null; // connector id within the searchConcept, the table that holds the searchFilters + searchFilters?: string[]; // allowlisted filter ids within the searchConnector }; export interface EntityInfo { diff --git a/frontend/src/js/entity-history/SearchEntities.tsx b/frontend/src/js/entity-history/SearchEntities.tsx index b1a74b9749..a2f6ab8c9f 100644 --- a/frontend/src/js/entity-history/SearchEntities.tsx +++ b/frontend/src/js/entity-history/SearchEntities.tsx @@ -9,7 +9,7 @@ import { usePostResolveEntities, } from "../api/api"; import { transformFilterValueToApi } from "../api/apiHelper"; -import type { ConceptT, TableT } from "../api/types"; +import type { TableT } from "../api/types"; import type { StateT } from "../app/reducers"; import PrimaryButton from "../button/PrimaryButton"; import { getConceptById } from "../concept-trees/globalTreeStoreHelper"; @@ -32,21 +32,19 @@ export const SearchEntites = ({ }: { onLoad: (payload: LoadingPayload) => void; }) => { - const searchConcept = useSelector((state) => { - const searchConceptId = state.entityHistory.defaultParams.searchConcept; + const searchConceptTable = useSelector( + (state) => { + const { searchConcept, searchConnector } = + state.entityHistory.defaultParams; + const concept = searchConcept ? getConceptById(searchConcept) : undefined; - return searchConceptId ? getConceptById(searchConceptId) : undefined; - }); + if (!concept || !nodeIsElement(concept)) return undefined; - if ( - !searchConcept || - !nodeIsElement(searchConcept) || - searchConcept.tables?.length !== 1 - ) { - return null; - } + return concept.tables?.find((t) => t.connectorId === searchConnector); + }, + ); - const searchConceptTable = searchConcept.tables[0]; + if (!searchConceptTable) return null; return ; }; diff --git a/frontend/src/js/entity-history/reducer.ts b/frontend/src/js/entity-history/reducer.ts index 16f94c0594..1877f06675 100644 --- a/frontend/src/js/entity-history/reducer.ts +++ b/frontend/src/js/entity-history/reducer.ts @@ -39,6 +39,7 @@ export type EntityHistoryStateT = { defaultParams: { sources: HistorySources; searchConcept: string | null; + searchConnector: string | null; searchFilters: string[]; }; isLoading: boolean; @@ -60,6 +61,7 @@ const initialState: EntityHistoryStateT = { defaultParams: { sources: { all: [], default: [] }, searchConcept: null, + searchConnector: null, searchFilters: [], }, label: "", @@ -88,6 +90,7 @@ export default function reducer( defaultParams: { sources: { all: action.payload.all, default: action.payload.default }, searchConcept: action.payload.searchConcept, + searchConnector: action.payload.searchConnector, searchFilters: action.payload.searchFilters || [], }, };