UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

93 lines 12.6 kB
import { BooleanOperator } from '../boolean-operator'; /** * Building block of search queries. Represents any node in a tree of predicates, that are combined with {@link BooleanOperator}s to create * a search query. * * See {@link SearchService} for more information. */ export class Predicate { _visible; _metadataGenerator; _filterTextSegmentsGenerator; /** * @param initiallyVisible whether the predicate should be initially displayed or not */ constructor(initiallyVisible = true) { this._visible = !!initiallyVisible; this._metadataGenerator = () => { throw new Error('This predicate has no metadata generator registered!'); }; this._filterTextSegmentsGenerator = () => { return []; }; } /** * @returns whether the Predicate should be displayed, or not */ get isVisible() { return this._visible; } /** * Combines the text segments of the predicates with the given operator and wraps the individual predicates in brackets optionaly * @param predicates sources of text segments that are to be combined with a boolean operator * @param operator boolean operator used to combine the individual predicate text segments * @param wrapWithBrackets whether the individual predicate text segments should be wrapped in braces or not * (if only one predicate is provided it is never wrapped) */ static combineTextSegmentsWithBooleanOperator(predicates, operator, wrapWithBrackets = false) { const result = []; let first = true; let hasTwo = false; for (const predicate of predicates) { const textSegments = predicate.createFilterTextSegments(); if (textSegments.length > 0) { if (!first) { if (!hasTwo && wrapWithBrackets) { result.unshift({ segment: '(' }); hasTwo = true; } if (wrapWithBrackets) { result.push({ segment: ')' }); } result.push({ segment: operator === BooleanOperator.AND ? 'search.and' : 'search.or', uppercase: true }); if (wrapWithBrackets) { result.push({ segment: '(' }); } } result.push(...textSegments); first = false; } } if (hasTwo && wrapWithBrackets) { result.push({ segment: ')' }); } return result; } /** * Sets the predicates state to `visible` */ show() { this._visible = true; } setMetadataGenerator(metadataGenerator) { this._metadataGenerator = metadataGenerator; } /** * @returns an object containing the necessary information for the reconstruction of the entire predicate tree in serializable form. * Returns `undefined` if the predicate tree rooted at this node is incomplete and would evaluate into an empty filter. */ createGeneratorMetadata() { return this._metadataGenerator(); } setFilterTextSegmentsGenerator(filterTextSegmentsGenerator) { this._filterTextSegmentsGenerator = filterTextSegmentsGenerator; } /** * @returns an Array containing text segments representing the content of this predicate. * The default implementation returns an empty array. */ createFilterTextSegments() { return this._filterTextSegmentsGenerator(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZGljYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9zZWFyY2gvbW9kZWxzL3ByZWRpY2F0ZS9wcmVkaWNhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFnQixTQUFTO0lBRWpCLFFBQVEsQ0FBVTtJQUNsQixrQkFBa0IsQ0FBc0M7SUFDeEQsNEJBQTRCLENBQWlDO0lBRXZFOztPQUVHO0lBQ0gsWUFBc0IsZ0JBQWdCLEdBQUcsSUFBSTtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsNEJBQTRCLEdBQUcsR0FBRyxFQUFFO1lBQ3JDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBUUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHNDQUFzQyxDQUFDLFVBQTBELEVBQzFELFFBQXlCLEVBQ3pCLGdCQUFnQixHQUFHLEtBQUs7UUFDekUsTUFBTSxNQUFNLEdBQTZCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1lBQ2hDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzFELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTt3QkFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO3dCQUMvQixNQUFNLEdBQUcsSUFBSSxDQUFDO3FCQUNqQjtvQkFDRCxJQUFJLGdCQUFnQixFQUFFO3dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7cUJBQy9CO29CQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsUUFBUSxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO29CQUN2RyxJQUFJLGdCQUFnQixFQUFFO3dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7cUJBQy9CO2lCQUNKO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztnQkFDN0IsS0FBSyxHQUFHLEtBQUssQ0FBQzthQUNqQjtTQUNKO1FBQ0QsSUFBSSxNQUFNLElBQUksZ0JBQWdCLEVBQUU7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxpQkFBc0Q7UUFDOUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGlCQUFpQixDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSx1QkFBdUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU0sOEJBQThCLENBQUMsMkJBQTJEO1FBQzdGLElBQUksQ0FBQyw0QkFBNEIsR0FBRywyQkFBMkIsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksd0JBQXdCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDL0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtRdWVyeX0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtHZW5lcmF0b3JNZXRhZGF0YX0gZnJvbSAnLi4vcGVyc2lzdGFuY2UvZ2VuZXJhdG9yLW1ldGFkYXRhJztcbmltcG9ydCB7RmlsdGVyVGV4dFNlZ21lbnR9IGZyb20gJy4uL3BlcnNpc3RhbmNlL2ZpbHRlci10ZXh0LXNlZ21lbnQnO1xuaW1wb3J0IHtCb29sZWFuT3BlcmF0b3J9IGZyb20gJy4uL2Jvb2xlYW4tb3BlcmF0b3InO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIG9mIHNlYXJjaCBxdWVyaWVzLiBSZXByZXNlbnRzIGFueSBub2RlIGluIGEgdHJlZSBvZiBwcmVkaWNhdGVzLCB0aGF0IGFyZSBjb21iaW5lZCB3aXRoIHtAbGluayBCb29sZWFuT3BlcmF0b3J9cyB0byBjcmVhdGVcbiAqIGEgc2VhcmNoIHF1ZXJ5LlxuICpcbiAqIFNlZSB7QGxpbmsgU2VhcmNoU2VydmljZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQcmVkaWNhdGUge1xuXG4gICAgcHJvdGVjdGVkIF92aXNpYmxlOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfbWV0YWRhdGFHZW5lcmF0b3I6ICgpID0+IEdlbmVyYXRvck1ldGFkYXRhIHwgdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBfZmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yOiAoKSA9PiBBcnJheTxGaWx0ZXJUZXh0U2VnbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaW5pdGlhbGx5VmlzaWJsZSB3aGV0aGVyIHRoZSBwcmVkaWNhdGUgc2hvdWxkIGJlIGluaXRpYWxseSBkaXNwbGF5ZWQgb3Igbm90XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGluaXRpYWxseVZpc2libGUgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSAhIWluaXRpYWxseVZpc2libGU7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhR2VuZXJhdG9yID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHByZWRpY2F0ZSBoYXMgbm8gbWV0YWRhdGEgZ2VuZXJhdG9yIHJlZ2lzdGVyZWQhJyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2ZpbHRlclRleHRTZWdtZW50c0dlbmVyYXRvciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBQcmVkaWNhdGUgc2hvdWxkIGJlIGRpc3BsYXllZCwgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSB7QGxpbmsgUXVlcnl9IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBgUXVlcnlgIGZvciB0aGUgZW50aXJlIHN1YnRyZWUgb2YgUHJlZGljYXRlcywgd2l0aFxuICAgICAqIHRoaXMgUHJlZGljYXRlIGFzIGl0J3Mgcm9vdCBub2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgcXVlcnkoKTogUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBDb21iaW5lcyB0aGUgdGV4dCBzZWdtZW50cyBvZiB0aGUgcHJlZGljYXRlcyB3aXRoIHRoZSBnaXZlbiBvcGVyYXRvciBhbmQgd3JhcHMgdGhlIGluZGl2aWR1YWwgcHJlZGljYXRlcyBpbiBicmFja2V0cyBvcHRpb25hbHlcbiAgICAgKiBAcGFyYW0gcHJlZGljYXRlcyBzb3VyY2VzIG9mIHRleHQgc2VnbWVudHMgdGhhdCBhcmUgdG8gYmUgY29tYmluZWQgd2l0aCBhIGJvb2xlYW4gb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0gb3BlcmF0b3IgYm9vbGVhbiBvcGVyYXRvciB1c2VkIHRvIGNvbWJpbmUgdGhlIGluZGl2aWR1YWwgcHJlZGljYXRlIHRleHQgc2VnbWVudHNcbiAgICAgKiBAcGFyYW0gd3JhcFdpdGhCcmFja2V0cyB3aGV0aGVyIHRoZSBpbmRpdmlkdWFsIHByZWRpY2F0ZSB0ZXh0IHNlZ21lbnRzIHNob3VsZCBiZSB3cmFwcGVkIGluIGJyYWNlcyBvciBub3RcbiAgICAgKiAoaWYgb25seSBvbmUgcHJlZGljYXRlIGlzIHByb3ZpZGVkIGl0IGlzIG5ldmVyIHdyYXBwZWQpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb21iaW5lVGV4dFNlZ21lbnRzV2l0aEJvb2xlYW5PcGVyYXRvcihwcmVkaWNhdGVzOiBJdGVyYWJsZUl0ZXJhdG9yPFByZWRpY2F0ZT4gfCBBcnJheTxQcmVkaWNhdGU+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IEJvb2xlYW5PcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBXaXRoQnJhY2tldHMgPSBmYWxzZSk6IEFycmF5PEZpbHRlclRleHRTZWdtZW50PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8RmlsdGVyVGV4dFNlZ21lbnQ+ID0gW107XG4gICAgICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgICAgIGxldCBoYXNUd28gPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgcHJlZGljYXRlcykge1xuICAgICAgICAgICAgY29uc3QgdGV4dFNlZ21lbnRzID0gcHJlZGljYXRlLmNyZWF0ZUZpbHRlclRleHRTZWdtZW50cygpO1xuICAgICAgICAgICAgaWYgKHRleHRTZWdtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1R3byAmJiB3cmFwV2l0aEJyYWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5zaGlmdCh7c2VnbWVudDogJygnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNUd28gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh3cmFwV2l0aEJyYWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7c2VnbWVudDogJyknfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe3NlZ21lbnQ6IG9wZXJhdG9yID09PSBCb29sZWFuT3BlcmF0b3IuQU5EID8gJ3NlYXJjaC5hbmQnIDogJ3NlYXJjaC5vcicsIHVwcGVyY2FzZTogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAod3JhcFdpdGhCcmFja2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe3NlZ21lbnQ6ICcoJ30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRleHRTZWdtZW50cyk7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzVHdvICYmIHdyYXBXaXRoQnJhY2tldHMpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtzZWdtZW50OiAnKSd9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHByZWRpY2F0ZXMgc3RhdGUgdG8gYHZpc2libGVgXG4gICAgICovXG4gICAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRNZXRhZGF0YUdlbmVyYXRvcihtZXRhZGF0YUdlbmVyYXRvcjogKCkgPT4gR2VuZXJhdG9yTWV0YWRhdGEgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFHZW5lcmF0b3IgPSBtZXRhZGF0YUdlbmVyYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGVudGlyZSBwcmVkaWNhdGUgdHJlZSBpbiBzZXJpYWxpemFibGUgZm9ybS5cbiAgICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBwcmVkaWNhdGUgdHJlZSByb290ZWQgYXQgdGhpcyBub2RlIGlzIGluY29tcGxldGUgYW5kIHdvdWxkIGV2YWx1YXRlIGludG8gYW4gZW1wdHkgZmlsdGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVHZW5lcmF0b3JNZXRhZGF0YSgpOiBHZW5lcmF0b3JNZXRhZGF0YSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YUdlbmVyYXRvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGaWx0ZXJUZXh0U2VnbWVudHNHZW5lcmF0b3IoZmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yOiAoKSA9PiBBcnJheTxGaWx0ZXJUZXh0U2VnbWVudD4pIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yID0gZmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IGNvbnRhaW5pbmcgdGV4dCBzZWdtZW50cyByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnQgb2YgdGhpcyBwcmVkaWNhdGUuXG4gICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBlbXB0eSBhcnJheS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyVGV4dFNlZ21lbnRzKCk6IEFycmF5PEZpbHRlclRleHRTZWdtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJUZXh0U2VnbWVudHNHZW5lcmF0b3IoKTtcbiAgICB9XG59XG4iXX0=