From eb0023e9617894873fe75748de187d85279498c8 Mon Sep 17 00:00:00 2001 From: James Date: Sat, 12 Nov 2022 13:44:30 -0500 Subject: [PATCH] fix: #1358, allows listSearchableFields to work when indicated fields are nested --- .../ListControls/getTextFieldsToBeSearched.ts | 11 +++++++++++ src/admin/components/elements/ListControls/index.tsx | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 src/admin/components/elements/ListControls/getTextFieldsToBeSearched.ts diff --git a/src/admin/components/elements/ListControls/getTextFieldsToBeSearched.ts b/src/admin/components/elements/ListControls/getTextFieldsToBeSearched.ts new file mode 100644 index 0000000000..0c11d0b80b --- /dev/null +++ b/src/admin/components/elements/ListControls/getTextFieldsToBeSearched.ts @@ -0,0 +1,11 @@ +import { Field, FieldAffectingData, fieldAffectsData } from '../../../../fields/config/types'; +import flattenFields from '../../../../utilities/flattenTopLevelFields'; + +export const getTextFieldsToBeSearched = (listSearchableFields: string[], fields: Field[]) => (): FieldAffectingData[] => { + if (listSearchableFields) { + const flattenedFields = flattenFields(fields); + return flattenedFields.filter((field) => fieldAffectsData(field) && listSearchableFields.includes(field.name)) as FieldAffectingData[]; + } + + return null; +}; diff --git a/src/admin/components/elements/ListControls/index.tsx b/src/admin/components/elements/ListControls/index.tsx index 6448e641cc..c3e9d5bb19 100644 --- a/src/admin/components/elements/ListControls/index.tsx +++ b/src/admin/components/elements/ListControls/index.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import AnimateHeight from 'react-animate-height'; -import { FieldAffectingData, fieldAffectsData } from '../../../../fields/config/types'; +import { fieldAffectsData } from '../../../../fields/config/types'; import SearchFilter from '../SearchFilter'; import ColumnSelector from '../ColumnSelector'; import WhereBuilder from '../WhereBuilder'; @@ -8,8 +8,8 @@ import SortComplex from '../SortComplex'; import Button from '../Button'; import { Props } from './types'; import { useSearchParams } from '../../utilities/SearchParams'; - import validateWhereQuery from '../WhereBuilder/validateWhereQuery'; +import { getTextFieldsToBeSearched } from './getTextFieldsToBeSearched'; import './index.scss'; @@ -38,7 +38,7 @@ const ListControls: React.FC = (props) => { const shouldInitializeWhereOpened = validateWhereQuery(params?.where); const [titleField] = useState(() => fields.find((field) => fieldAffectsData(field) && field.name === useAsTitle)); - const [textFieldsToBeSearched] = useState(listSearchableFields ? () => fields.filter((field) => fieldAffectsData(field) && listSearchableFields.includes(field.name)) as FieldAffectingData[] : null); + const [textFieldsToBeSearched] = useState(getTextFieldsToBeSearched(listSearchableFields, fields)); const [visibleDrawer, setVisibleDrawer] = useState<'where' | 'sort' | 'columns'>(shouldInitializeWhereOpened ? 'where' : undefined); return (