From f903d0b6f04bade95c139a9c64a1327eee1aae2b Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Tue, 12 Mar 2019 10:54:06 +0100 Subject: [PATCH] Create addFullTextSearch of FilterBuilder Feature #14917 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- src/services/api/filter-builder.test.ts | 8 ++++++++ src/services/api/filter-builder.ts | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/src/services/api/filter-builder.test.ts b/src/services/api/filter-builder.test.ts index 2ddd6bf0..d9b76b1e 100644 --- a/src/services/api/filter-builder.test.ts +++ b/src/services/api/filter-builder.test.ts @@ -81,4 +81,12 @@ describe("FilterBuilder", () => { .getFilters()) .toEqual(`["myPrefix.etag","in",["etagValue1","etagValue2"]]`); }); + + it('should add full text search', () => { + expect( + new FilterBuilder() + .addFullTextSearch('my custom search') + .getFilters() + ).toEqual(`["any","@@","my:*&custom:*&search"]`); + }); }); diff --git a/src/services/api/filter-builder.ts b/src/services/api/filter-builder.ts index 4b3db9fa..e8992341 100644 --- a/src/services/api/filter-builder.ts +++ b/src/services/api/filter-builder.ts @@ -55,6 +55,13 @@ export class FilterBuilder { return this.addCondition("properties", "exists", value, "", "", resourcePrefix); } + public addFullTextSearch(value: string) { + // Filter construction implementation taken from + // https://dev.arvados.org/projects/arvados/repository/entry/apps/workbench/app/assets/javascripts/filterable.js + // https://dev.arvados.org/projects/arvados/repository/entry/apps/workbench/app/assets/javascripts/to_tsquery.js + return this.addCondition('any', '@@', value.replace(/[^-\w\.\/]+/g, ' ').trim().replace(/ /g, ':*&')); + } + public getFilters() { return this.filters; } -- 2.30.2