From: Michal Klobukowski Date: Tue, 12 Mar 2019 11:44:44 +0000 (+0100) Subject: Create searchQueryToFilters function X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/f6af447a642cf3c9692f0ffda156321201d7471c Create searchQueryToFilters function Feature #14917 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/store/search-bar/search-bar-actions.ts b/src/store/search-bar/search-bar-actions.ts index 01a0311ec3..9bb7575054 100644 --- a/src/store/search-bar/search-bar-actions.ts +++ b/src/store/search-bar/search-bar-actions.ts @@ -506,6 +506,41 @@ export const getFilters = (filterName: string, searchValue: string, sq: ParseSea .getFilters(); }; +export const searchQueryToFilters = (sq: ParseSearchQuery): string => { + const filter = new FilterBuilder(); + const resourceKind = getSearchQueryFirstProp(sq, 'type') as ResourceKind; + + const projectUuid = getSearchQueryFirstProp(sq, 'project'); + if (projectUuid) { + filter.addEqual('ownerUuid', projectUuid); + } + + const dateFrom = getSearchQueryFirstProp(sq, 'from'); + if (dateFrom) { + filter.addGte('modified_at', buildDateFilter(dateFrom)); + } + + const dateTo = getSearchQueryFirstProp(sq, 'to'); + if (dateTo) { + filter.addLte('modified_at', buildDateFilter(dateTo)); + } + + const props = getSearchQueryProperties(sq); + props.forEach(p => { + if (p.value) { + filter + .addILike(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.PROJECT) + .addILike(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.COLLECTION); + } + filter.addExists(p.key); + }); + + return filter + .addIsA("uuid", buildUuidFilter(resourceKind)) + .addFullTextSearch(sq.values.join(' ')) + .getFilters(); +}; + const buildUuidFilter = (type?: ResourceKind): ResourceKind[] => { return type ? [type] : [ResourceKind.PROJECT, ResourceKind.COLLECTION, ResourceKind.PROCESS]; };