@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
27 lines • 4.04 kB
JavaScript
import { Operator } from './operator';
import { Query } from '../query/query';
import { Operators } from './operators';
/**
* Operator that matches if the input is a substring of some value.
* Can only be used on fields that are texts and are not indexed as keywords.
*/
export class Substring extends Operator {
constructor() {
super(1);
}
createQuery(elasticKeywords, args) {
this.checkArgumentsCount(args);
// TODO IMPROVEMENT 27.4.2020 - we could use regular expressions to search for substrings which would solve the unintuitive
// behavior that occurs when we search for strings that contain spaces. We need to escape the input string in a special way
// if we choose to do this
const escapedValue = Operator.escapeInput(args[0]).value?.replace(/ /g, '\\ ');
return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`(${keyword}:*${escapedValue}*)`));
}
getOperatorNameTemplate() {
return ['search.operator.substring', Operator.INPUT_PLACEHOLDER];
}
serialize() {
return Operators.SUBSTRING;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9zZWFyY2gvbW9kZWxzL29wZXJhdG9yL3N1YnN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxTQUFVLFNBQVEsUUFBZ0I7SUFDM0M7UUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLGVBQThCLEVBQUUsSUFBbUI7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLDJIQUEySDtRQUMzSCw0SEFBNEg7UUFDNUgsMkJBQTJCO1FBQzNCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0UsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09wZXJhdG9yfSBmcm9tICcuL29wZXJhdG9yJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5JztcbmltcG9ydCB7T3BlcmF0b3JzfSBmcm9tICcuL29wZXJhdG9ycyc7XG5cbi8qKlxuICogT3BlcmF0b3IgdGhhdCBtYXRjaGVzIGlmIHRoZSBpbnB1dCBpcyBhIHN1YnN0cmluZyBvZiBzb21lIHZhbHVlLlxuICogQ2FuIG9ubHkgYmUgdXNlZCBvbiBmaWVsZHMgdGhhdCBhcmUgdGV4dHMgYW5kIGFyZSBub3QgaW5kZXhlZCBhcyBrZXl3b3Jkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1YnN0cmluZyBleHRlbmRzIE9wZXJhdG9yPHN0cmluZz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigxKTtcbiAgICB9XG5cbiAgICBjcmVhdGVRdWVyeShlbGFzdGljS2V5d29yZHM6IEFycmF5PHN0cmluZz4sIGFyZ3M6IEFycmF5PHN0cmluZz4pOiBRdWVyeSB7XG4gICAgICAgIHRoaXMuY2hlY2tBcmd1bWVudHNDb3VudChhcmdzKTtcbiAgICAgICAgLy8gVE9ETyBJTVBST1ZFTUVOVCAyNy40LjIwMjAgLSB3ZSBjb3VsZCB1c2UgcmVndWxhciBleHByZXNzaW9ucyB0byBzZWFyY2ggZm9yIHN1YnN0cmluZ3Mgd2hpY2ggd291bGQgc29sdmUgdGhlIHVuaW50dWl0aXZlXG4gICAgICAgIC8vICBiZWhhdmlvciB0aGF0IG9jY3VycyB3aGVuIHdlIHNlYXJjaCBmb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gc3BhY2VzLiBXZSBuZWVkIHRvIGVzY2FwZSB0aGUgaW5wdXQgc3RyaW5nIGluIGEgc3BlY2lhbCB3YXlcbiAgICAgICAgLy8gIGlmIHdlIGNob29zZSB0byBkbyB0aGlzXG4gICAgICAgIGNvbnN0IGVzY2FwZWRWYWx1ZSA9IE9wZXJhdG9yLmVzY2FwZUlucHV0KGFyZ3NbMF0pLnZhbHVlPy5yZXBsYWNlKC8gL2csICdcXFxcICcpO1xuICAgICAgICByZXR1cm4gT3BlcmF0b3IuZm9yRWFjaEtleXdvcmQoZWxhc3RpY0tleXdvcmRzLCBrZXl3b3JkID0+IG5ldyBRdWVyeShgKCR7a2V5d29yZH06KiR7ZXNjYXBlZFZhbHVlfSopYCkpO1xuICAgIH1cblxuICAgIGdldE9wZXJhdG9yTmFtZVRlbXBsYXRlKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gWydzZWFyY2gub3BlcmF0b3Iuc3Vic3RyaW5nJywgT3BlcmF0b3IuSU5QVVRfUExBQ0VIT0xERVJdO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBPcGVyYXRvcnMgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gT3BlcmF0b3JzLlNVQlNUUklORztcbiAgICB9XG59XG4iXX0=