15781: Merge branch 'master' into 15781-multi-value-property-edit
[arvados-workbench2.git] / src / store / search-bar / search-bar-actions.ts
index b91dc9d10fdbc1c8a6b0a063a30b9a20fbe96418..4af132ea9c6efa5d3c3a4594fbaeb0e08190af6f 100644 (file)
@@ -232,9 +232,16 @@ const buildQueryFromKeyMap = (data: any, keyMap: string[][], mode: 'rebuild' | '
         const v = data[key];
 
         if (data.hasOwnProperty(key)) {
-            const pattern = v === false
-                ? `${field.replace(':', '\\:\\s*')}\\s*`
-                : `${field.replace(':', '\\:\\s*')}\\:\\s*"[\\w|\\#|\\-|\\/]*"\\s*`;
+            let pattern: string;
+            if (v === false) {
+                pattern = `${field.replace(':', '\\:\\s*')}\\s*`;
+            } else if (key.startsWith('prop-')) {
+                // On properties, only remove key:value duplicates, allowing
+                // multiple properties with the same key.
+                pattern = `${field.replace(':', '\\:\\s*')}\\:\\s*${v}\\s*`;
+            } else {
+                pattern = `${field.replace(':', '\\:\\s*')}\\:\\s*[\\w|\\#|\\-|\\/]*\\s*`;
+            }
             value = value.replace(new RegExp(pattern), '');
         }
 
@@ -353,8 +360,8 @@ export const queryToFilters = (query: string) => {
     data.properties.forEach(p => {
         if (p.value) {
             filter
-                .addILike(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.PROJECT)
-                .addILike(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.COLLECTION);
+                .addContains(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.PROJECT)
+                .addContains(`properties.${p.key}`, p.value, GroupContentsResourcePrefix.COLLECTION);
         }
         filter.addExists(p.key);
     });