From 227ffcbd2efe8cccd4a9025344b09632630cff14 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Wed, 12 Feb 2020 20:59:46 -0300 Subject: [PATCH] 15781: Uses 'contains' or 'ilike' on prop searches depending on API revision. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- src/store/search-bar/search-bar-actions.ts | 16 +++++++++++----- .../search-results-middleware-service.ts | 12 ++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/store/search-bar/search-bar-actions.ts b/src/store/search-bar/search-bar-actions.ts index 4af132ea..794ca8dc 100644 --- a/src/store/search-bar/search-bar-actions.ts +++ b/src/store/search-bar/search-bar-actions.ts @@ -212,7 +212,7 @@ const searchGroups = (searchValue: string, limit: number) => const { cluster: clusterId } = getAdvancedDataFromQuery(searchValue); const sessions = getSearchSessions(clusterId, getState().auth.sessions); const lists: ListResults[] = await Promise.all(sessions.map(session => { - const filters = queryToFilters(searchValue); + const filters = queryToFilters(searchValue, session.apiRevision); return services.groupsService.contents('', { filters, limit, @@ -336,7 +336,7 @@ export const getSearchSessions = (clusterId: string | undefined, sessions: Sessi return sessions.filter(s => s.loggedIn && (!clusterId || s.clusterId === clusterId)); }; -export const queryToFilters = (query: string) => { +export const queryToFilters = (query: string, apiRevision: number) => { const data = getAdvancedDataFromQuery(query); const filter = new FilterBuilder(); const resourceKind = data.type; @@ -359,9 +359,15 @@ export const queryToFilters = (query: string) => { data.properties.forEach(p => { if (p.value) { - filter - .addContains(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.PROJECT) - .addContains(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.COLLECTION); + if (apiRevision < 20200212) { + filter + .addILike(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.PROJECT) + .addILike(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.COLLECTION); + } else { + filter + .addContains(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.PROJECT) + .addContains(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.COLLECTION); + } } filter.addExists(p.key); }); diff --git a/src/store/search-results-panel/search-results-middleware-service.ts b/src/store/search-results-panel/search-results-middleware-service.ts index 84e68ab0..f054a4e4 100644 --- a/src/store/search-results-panel/search-results-middleware-service.ts +++ b/src/store/search-results-panel/search-results-middleware-service.ts @@ -42,8 +42,6 @@ export class SearchResultsMiddlewareService extends DataExplorerMiddlewareServic return; } - const params = getParams(dataExplorer, searchValue); - const initial = { itemsAvailable: 0, items: [] as GroupContentsResource[], @@ -56,24 +54,26 @@ export class SearchResultsMiddlewareService extends DataExplorerMiddlewareServic api.dispatch(setItems(initial)); } - sessions.map(session => + sessions.map(session => { + const params = getParams(dataExplorer, searchValue, session.apiRevision); this.services.groupsService.contents('', params, session) .then((response) => { api.dispatch(updateResources(response.items)); api.dispatch(appendItems(response)); }).catch(() => { api.dispatch(couldNotFetchSearchResults(session.clusterId)); - }) + }); + } ); } } const typeFilters = (columns: DataColumns) => serializeResourceTypeFilters(getDataExplorerColumnFilters(columns, ProjectPanelColumnNames.TYPE)); -export const getParams = (dataExplorer: DataExplorer, query: string) => ({ +const getParams = (dataExplorer: DataExplorer, query: string, apiRevision: number) => ({ ...dataExplorerToListParams(dataExplorer), filters: joinFilters( - queryToFilters(query), + queryToFilters(query, apiRevision), typeFilters(dataExplorer.columns) ), order: getOrder(dataExplorer), -- 2.30.2