Create addFullTextSearch of FilterBuilder
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 12 Mar 2019 09:54:06 +0000 (10:54 +0100)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Tue, 12 Mar 2019 09:54:06 +0000 (10:54 +0100)
Feature #14917

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/services/api/filter-builder.test.ts
src/services/api/filter-builder.ts

index 2ddd6bf0d337a658019192d6f5878bd838a08e46..d9b76b1e6ac867dd3576cee4aadb7b22fef66f32 100644 (file)
@@ -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"]`);
+    });
 });
index 4b3db9fa2b92bb976a577a7e0eb2ee8de4161ab5..e8992341098eb4b9ee506aa529a9a72a06b948fa 100644 (file)
@@ -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;
     }