From c808eeca79e3662b8571b4ed0f941e3f19b2492f Mon Sep 17 00:00:00 2001 From: Charles Bochet Date: Sun, 10 Sep 2023 17:07:05 -0700 Subject: [PATCH] Complete useFilteredSearchQuery refactoring (#1531) Complete useFilteredSearchQuery ref actoring --- .../components/ActivityAssigneePicker.tsx | 6 +-- .../hooks/useFilteredSearchCompanyQuery.ts | 2 +- .../people/components/PeoplePicker.tsx | 25 ++++++----- .../hooks/useFilteredSearchPeopleQuery.ts | 6 +-- .../hooks/useFilteredSearchEntityQuery.ts | 41 +++++++------------ .../FilterDropdownUserSearchSelect.tsx | 6 +-- .../modules/users/components/UserPicker.tsx | 6 +-- 7 files changed, 35 insertions(+), 57 deletions(-) diff --git a/front/src/modules/activities/components/ActivityAssigneePicker.tsx b/front/src/modules/activities/components/ActivityAssigneePicker.tsx index c2bdc8ee0..643608540 100644 --- a/front/src/modules/activities/components/ActivityAssigneePicker.tsx +++ b/front/src/modules/activities/components/ActivityAssigneePicker.tsx @@ -41,11 +41,7 @@ export function ActivityAssigneePicker({ queryHook: useSearchUserQuery, filters: [ { - fieldName: 'firstName', - filter: relationPickerSearchFilter, - }, - { - fieldName: 'lastName', + fieldNames: ['firstName', 'lastName'], filter: relationPickerSearchFilter, }, ], diff --git a/front/src/modules/companies/hooks/useFilteredSearchCompanyQuery.ts b/front/src/modules/companies/hooks/useFilteredSearchCompanyQuery.ts index 10797d15f..fcae76595 100644 --- a/front/src/modules/companies/hooks/useFilteredSearchCompanyQuery.ts +++ b/front/src/modules/companies/hooks/useFilteredSearchCompanyQuery.ts @@ -16,7 +16,7 @@ export function useFilteredSearchCompanyQuery({ queryHook: useSearchCompanyQuery, filters: [ { - fieldName: 'name', + fieldNames: ['name'], filter: searchFilter, }, ], diff --git a/front/src/modules/people/components/PeoplePicker.tsx b/front/src/modules/people/components/PeoplePicker.tsx index ebf199aa2..227ea4685 100644 --- a/front/src/modules/people/components/PeoplePicker.tsx +++ b/front/src/modules/people/components/PeoplePicker.tsx @@ -31,19 +31,24 @@ export function PeoplePicker({ relationPickerSearchFilterScopedState, ); + const queryFilters = [ + { + fieldNames: ['firstName', 'lastName'], + filter: relationPickerSearchFilter, + }, + ]; + + if (companyId) { + queryFilters.push({ + fieldNames: ['companyId'], + filter: companyId, + }); + } + const people = useFilteredSearchEntityQuery({ queryHook: useSearchPeopleQuery, selectedIds: [personId ?? ''], - filters: [ - { - fieldName: 'firstName', - filter: relationPickerSearchFilter, - }, - { - fieldName: 'lastName', - filter: relationPickerSearchFilter, - }, - ], + filters: queryFilters, mappingFunction: (person) => ({ entityType: Entity.Person, id: person.id, diff --git a/front/src/modules/people/hooks/useFilteredSearchPeopleQuery.ts b/front/src/modules/people/hooks/useFilteredSearchPeopleQuery.ts index 07f132a81..72b4a83a8 100644 --- a/front/src/modules/people/hooks/useFilteredSearchPeopleQuery.ts +++ b/front/src/modules/people/hooks/useFilteredSearchPeopleQuery.ts @@ -16,11 +16,7 @@ export function useFilteredSearchPeopleQuery({ queryHook: useSearchPeopleQuery, filters: [ { - fieldName: 'firstName', - filter: searchFilter, - }, - { - fieldName: 'lastName', + fieldNames: ['firstName', 'lastName'], filter: searchFilter, }, ], diff --git a/front/src/modules/search/hooks/useFilteredSearchEntityQuery.ts b/front/src/modules/search/hooks/useFilteredSearchEntityQuery.ts index 012e2fb55..391c40092 100644 --- a/front/src/modules/search/hooks/useFilteredSearchEntityQuery.ts +++ b/front/src/modules/search/hooks/useFilteredSearchEntityQuery.ts @@ -26,7 +26,7 @@ type ExtractEntityTypeFromQueryResponse = T extends { ? U : never; -type SearchFilter = { fieldName: string; filter: string | number }; +type SearchFilter = { fieldNames: string[]; filter: string | number }; const DEFAULT_SEARCH_REQUEST_LIMIT = 10; @@ -87,12 +87,18 @@ export function useFilteredSearchEntityQuery< } as QueryVariables, }); - const searchFilterByField = filters.map(({ fieldName, filter }) => ({ - [fieldName]: { - contains: `%${filter}%`, - mode: QueryMode.Insensitive, - }, - })); + const searchFilter = filters.map(({ fieldNames, filter }) => { + return { + OR: fieldNames.map((fieldName) => ({ + [fieldName]: { + contains: `%${filter}%`, + mode: QueryMode.Insensitive, + }, + })), + }; + }); + + console.log(searchFilter); const { loading: filteredSelectedEntitiesLoading, @@ -102,7 +108,7 @@ export function useFilteredSearchEntityQuery< where: { AND: [ { - OR: searchFilterByField, + AND: searchFilter, }, { id: { @@ -117,30 +123,13 @@ export function useFilteredSearchEntityQuery< } as QueryVariables, }); - const filterEntitesBy = filterByFields - ? filterByFields.map((field) => { - const extractedValues: Record = {}; - - for (const key in field) { - extractedValues[key] = { - equals: field[key], - }; - } - - return extractedValues; - }) - : []; - const { loading: entitiesToSelectLoading, data: entitiesToSelectData } = queryHook({ variables: { where: { AND: [ { - OR: filterEntitesBy, - }, - { - OR: searchFilterByField, + AND: searchFilter, }, { id: { diff --git a/front/src/modules/users/components/FilterDropdownUserSearchSelect.tsx b/front/src/modules/users/components/FilterDropdownUserSearchSelect.tsx index dc70f46f2..fae07d046 100644 --- a/front/src/modules/users/components/FilterDropdownUserSearchSelect.tsx +++ b/front/src/modules/users/components/FilterDropdownUserSearchSelect.tsx @@ -28,11 +28,7 @@ export function FilterDropdownUserSearchSelect({ queryHook: useSearchUserQuery, filters: [ { - fieldName: 'firstName', - filter: filterDropdownSearchInput, - }, - { - fieldName: 'lastName', + fieldNames: ['firstName', 'lastName'], filter: filterDropdownSearchInput, }, ], diff --git a/front/src/modules/users/components/UserPicker.tsx b/front/src/modules/users/components/UserPicker.tsx index 7fe652287..61928ac3e 100644 --- a/front/src/modules/users/components/UserPicker.tsx +++ b/front/src/modules/users/components/UserPicker.tsx @@ -31,11 +31,7 @@ export function UserPicker({ queryHook: useSearchUserQuery, filters: [ { - fieldName: 'firstName', - filter: relationPickerSearchFilter, - }, - { - fieldName: 'lastName', + fieldNames: ['firstName', 'lastName'], filter: relationPickerSearchFilter, }, ],