UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

123 lines 15.3 kB
import { Subject } from 'rxjs'; import { EditableElementaryPredicate } from './editable-elementary-predicate'; import { IncrementingCounter } from '../../../utility/incrementing-counter'; import { Query } from '../query/query'; import { EditablePredicate } from './editable-predicate'; import { Predicate } from './predicate'; /** * A complex, editable `Predicate`. Represents an inner node in the predicate tree, that can process changes of `Query` objects * held by its child nodes. It can notify the parent tree node about changes to the held `Query`. */ export class EditableClausePredicate extends EditablePredicate { _operator; _bracketSubPredicateText; _predicates; _childUpdated$; _childCounter; _query; constructor(_operator, parentNotifier, initiallyVisible = true, _bracketSubPredicateText = false) { super(parentNotifier, initiallyVisible); this._operator = _operator; this._bracketSubPredicateText = _bracketSubPredicateText; this._predicates = new Map(); this._childUpdated$ = new Subject(); this._childCounter = new IncrementingCounter(); this._query = Query.emptyQuery(); this.initializeFilterTextSegmentsGenerator(); this._childUpdated$.subscribe(() => { this.updateQueryAndNotify(); }); } get query() { return this._query; } destroy() { super.destroy(); this._childUpdated$.complete(); } show() { super.show(); this.showAll(); } /** * Shows the predicates with the given ids. Skips ids that don't exist. * @param predicateIds the ids of the predicates that should be shown. */ showPredicates(predicateIds) { predicateIds.forEach(id => { if (this._predicates.has(id)) { this._predicates.get(id).show(); } }); } /** * Adds new child predicate of type {@link EditableElementaryPredicate} * @param initiallyVisible whether the new predicate should be initially visible */ addNewElementaryPredicate(initiallyVisible = true) { return this.addPredicate(new EditableElementaryPredicate(this._childUpdated$, initiallyVisible)); } /** * Adds new child predicate of type {@link EditableClausePredicate} * @param operator the operator of the child clause predicate * @param initiallyVisible whether the new predicate should be initially visible */ addNewClausePredicate(operator, initiallyVisible = true) { return this.addPredicate(new EditableClausePredicate(operator, this._childUpdated$, initiallyVisible)); } /** * Generates an id for the new predicate, adds it into the map and updates the query * * If you want to add an editable predicate, use one of the other methods, so that this predicate can react to changes. * @param predicate the new predicate */ addPredicate(predicate) { const id = this._childCounter.next(); this._predicates.set(id, predicate); this.updateQueryAndNotify(); return id; } removePredicate(id) { const r = this._predicates.delete(id); this.updateQueryAndNotify(); return r; } getPredicateMap() { return this._predicates; } /** * Updates the `Query` and notifies the parent. */ updateQueryAndNotify() { this.updateQuery(); this.notifyParentPredicate(); } /** * Updates the value of the [_query]{@link ClausePredicate#_query} attribute. * * See [combineQueries()]{@link Query#combineQueries} for more information. */ updateQuery() { this._query = Query.combineQueries(this.queries, this._operator); } /** * @returns the `Array` of {@link Query} objects stored within this object's [_predicates]{@link ClausePredicate#_predicates} attribute. */ get queries() { return Array.from(this._predicates.values()).map(p => p.query); } /** * Sets this predicate and all its sub-predicates to visible. */ showAll() { for (const p of this._predicates.values()) { p.show(); } } initializeFilterTextSegmentsGenerator() { this._filterTextSegmentsGenerator = () => { return Predicate.combineTextSegmentsWithBooleanOperator(this._predicates.values(), this._operator, this._bracketSubPredicateText); }; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUtY2xhdXNlLXByZWRpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvc2VhcmNoL21vZGVscy9wcmVkaWNhdGUvZWRpdGFibGUtY2xhdXNlLXByZWRpY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBR3RDOzs7R0FHRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxpQkFBaUI7SUFPcEM7SUFHQTtJQVJaLFdBQVcsQ0FBeUI7SUFDcEMsY0FBYyxDQUFnQjtJQUM5QixhQUFhLENBQXNCO0lBQ25DLE1BQU0sQ0FBUTtJQUV4QixZQUFzQixTQUEwQixFQUNwQyxjQUE4QixFQUM5QixnQkFBZ0IsR0FBRyxJQUFJLEVBQ2IsMkJBQTJCLEtBQUs7UUFDbEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBSnRCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBRzFCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBUTtRQUVsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksbUJB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O0lBQ08sT0FBTztRQUNiLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDWjtJQUNMLENBQUM7SUFFTyxxQ0FBcUM7UUFDekMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsRUFBRTtZQUNyQyxPQUFPLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUM3RSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Qm9vbGVhbk9wZXJhdG9yfSBmcm9tICcuLi9ib29sZWFuLW9wZXJhdG9yJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0VkaXRhYmxlRWxlbWVudGFyeVByZWRpY2F0ZX0gZnJvbSAnLi9lZGl0YWJsZS1lbGVtZW50YXJ5LXByZWRpY2F0ZSc7XG5pbXBvcnQge0luY3JlbWVudGluZ0NvdW50ZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvaW5jcmVtZW50aW5nLWNvdW50ZXInO1xuaW1wb3J0IHtRdWVyeX0gZnJvbSAnLi4vcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtFZGl0YWJsZVByZWRpY2F0ZX0gZnJvbSAnLi9lZGl0YWJsZS1wcmVkaWNhdGUnO1xuaW1wb3J0IHtQcmVkaWNhdGV9IGZyb20gJy4vcHJlZGljYXRlJztcblxuXG4vKipcbiAqIEEgY29tcGxleCwgZWRpdGFibGUgYFByZWRpY2F0ZWAuIFJlcHJlc2VudHMgYW4gaW5uZXIgbm9kZSBpbiB0aGUgcHJlZGljYXRlIHRyZWUsIHRoYXQgY2FuIHByb2Nlc3MgY2hhbmdlcyBvZiBgUXVlcnlgIG9iamVjdHNcbiAqIGhlbGQgYnkgaXRzIGNoaWxkIG5vZGVzLiBJdCBjYW4gbm90aWZ5IHRoZSBwYXJlbnQgdHJlZSBub2RlIGFib3V0IGNoYW5nZXMgdG8gdGhlIGhlbGQgYFF1ZXJ5YC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlIGV4dGVuZHMgRWRpdGFibGVQcmVkaWNhdGUge1xuXG4gICAgcHJvdGVjdGVkIF9wcmVkaWNhdGVzOiBNYXA8bnVtYmVyLCBQcmVkaWNhdGU+O1xuICAgIHByb3RlY3RlZCBfY2hpbGRVcGRhdGVkJDogU3ViamVjdDx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgX2NoaWxkQ291bnRlcjogSW5jcmVtZW50aW5nQ291bnRlcjtcbiAgICBwcm90ZWN0ZWQgX3F1ZXJ5OiBRdWVyeTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfb3BlcmF0b3I6IEJvb2xlYW5PcGVyYXRvcixcbiAgICAgICAgICAgICAgICBwYXJlbnROb3RpZmllcj86IFN1YmplY3Q8dm9pZD4sXG4gICAgICAgICAgICAgICAgaW5pdGlhbGx5VmlzaWJsZSA9IHRydWUsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9icmFja2V0U3ViUHJlZGljYXRlVGV4dCA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudE5vdGlmaWVyLCBpbml0aWFsbHlWaXNpYmxlKTtcbiAgICAgICAgdGhpcy5fcHJlZGljYXRlcyA9IG5ldyBNYXA8bnVtYmVyLCBQcmVkaWNhdGU+KCk7XG4gICAgICAgIHRoaXMuX2NoaWxkVXBkYXRlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLl9jaGlsZENvdW50ZXIgPSBuZXcgSW5jcmVtZW50aW5nQ291bnRlcigpO1xuICAgICAgICB0aGlzLl9xdWVyeSA9IFF1ZXJ5LmVtcHR5UXVlcnkoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yKCk7XG5cbiAgICAgICAgdGhpcy5fY2hpbGRVcGRhdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVyeUFuZE5vdGlmeSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgcXVlcnkoKTogUXVlcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fY2hpbGRVcGRhdGVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93KCkge1xuICAgICAgICBzdXBlci5zaG93KCk7XG4gICAgICAgIHRoaXMuc2hvd0FsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBwcmVkaWNhdGVzIHdpdGggdGhlIGdpdmVuIGlkcy4gU2tpcHMgaWRzIHRoYXQgZG9uJ3QgZXhpc3QuXG4gICAgICogQHBhcmFtIHByZWRpY2F0ZUlkcyB0aGUgaWRzIG9mIHRoZSBwcmVkaWNhdGVzIHRoYXQgc2hvdWxkIGJlIHNob3duLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93UHJlZGljYXRlcyhwcmVkaWNhdGVJZHM6IEFycmF5PG51bWJlcj4pOiB2b2lkIHtcbiAgICAgICAgcHJlZGljYXRlSWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZWRpY2F0ZXMuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZWRpY2F0ZXMuZ2V0KGlkKS5zaG93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbmV3IGNoaWxkIHByZWRpY2F0ZSBvZiB0eXBlIHtAbGluayBFZGl0YWJsZUVsZW1lbnRhcnlQcmVkaWNhdGV9XG4gICAgICogQHBhcmFtIGluaXRpYWxseVZpc2libGUgd2hldGhlciB0aGUgbmV3IHByZWRpY2F0ZSBzaG91bGQgYmUgaW5pdGlhbGx5IHZpc2libGVcbiAgICAgKi9cbiAgICBhZGROZXdFbGVtZW50YXJ5UHJlZGljYXRlKGluaXRpYWxseVZpc2libGUgPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkUHJlZGljYXRlKG5ldyBFZGl0YWJsZUVsZW1lbnRhcnlQcmVkaWNhdGUodGhpcy5fY2hpbGRVcGRhdGVkJCwgaW5pdGlhbGx5VmlzaWJsZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbmV3IGNoaWxkIHByZWRpY2F0ZSBvZiB0eXBlIHtAbGluayBFZGl0YWJsZUNsYXVzZVByZWRpY2F0ZX1cbiAgICAgKiBAcGFyYW0gb3BlcmF0b3IgdGhlIG9wZXJhdG9yIG9mIHRoZSBjaGlsZCBjbGF1c2UgcHJlZGljYXRlXG4gICAgICogQHBhcmFtIGluaXRpYWxseVZpc2libGUgd2hldGhlciB0aGUgbmV3IHByZWRpY2F0ZSBzaG91bGQgYmUgaW5pdGlhbGx5IHZpc2libGVcbiAgICAgKi9cbiAgICBhZGROZXdDbGF1c2VQcmVkaWNhdGUob3BlcmF0b3I6IEJvb2xlYW5PcGVyYXRvciwgaW5pdGlhbGx5VmlzaWJsZSA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRQcmVkaWNhdGUobmV3IEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlKG9wZXJhdG9yLCB0aGlzLl9jaGlsZFVwZGF0ZWQkLCBpbml0aWFsbHlWaXNpYmxlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGFuIGlkIGZvciB0aGUgbmV3IHByZWRpY2F0ZSwgYWRkcyBpdCBpbnRvIHRoZSBtYXAgYW5kIHVwZGF0ZXMgdGhlIHF1ZXJ5XG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBhZGQgYW4gZWRpdGFibGUgcHJlZGljYXRlLCB1c2Ugb25lIG9mIHRoZSBvdGhlciBtZXRob2RzLCBzbyB0aGF0IHRoaXMgcHJlZGljYXRlIGNhbiByZWFjdCB0byBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSBwcmVkaWNhdGUgdGhlIG5ldyBwcmVkaWNhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkUHJlZGljYXRlKHByZWRpY2F0ZTogUHJlZGljYXRlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLl9jaGlsZENvdW50ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLl9wcmVkaWNhdGVzLnNldChpZCwgcHJlZGljYXRlKTtcbiAgICAgICAgdGhpcy51cGRhdGVRdWVyeUFuZE5vdGlmeSgpO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuXG4gICAgcmVtb3ZlUHJlZGljYXRlKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuX3ByZWRpY2F0ZXMuZGVsZXRlKGlkKTtcbiAgICAgICAgdGhpcy51cGRhdGVRdWVyeUFuZE5vdGlmeSgpO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJlZGljYXRlTWFwKCk6IE1hcDxudW1iZXIsIFByZWRpY2F0ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZGljYXRlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBgUXVlcnlgIGFuZCBub3RpZmllcyB0aGUgcGFyZW50LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVRdWVyeUFuZE5vdGlmeSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVRdWVyeSgpO1xuICAgICAgICB0aGlzLm5vdGlmeVBhcmVudFByZWRpY2F0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSBbX3F1ZXJ5XXtAbGluayBDbGF1c2VQcmVkaWNhdGUjX3F1ZXJ5fSBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBTZWUgW2NvbWJpbmVRdWVyaWVzKClde0BsaW5rIFF1ZXJ5I2NvbWJpbmVRdWVyaWVzfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlUXVlcnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3F1ZXJ5ID0gUXVlcnkuY29tYmluZVF1ZXJpZXModGhpcy5xdWVyaWVzLCB0aGlzLl9vcGVyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIGBBcnJheWAgb2Yge0BsaW5rIFF1ZXJ5fSBvYmplY3RzIHN0b3JlZCB3aXRoaW4gdGhpcyBvYmplY3QncyBbX3ByZWRpY2F0ZXNde0BsaW5rIENsYXVzZVByZWRpY2F0ZSNfcHJlZGljYXRlc30gYXR0cmlidXRlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgcXVlcmllcygpOiBBcnJheTxRdWVyeT4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9wcmVkaWNhdGVzLnZhbHVlcygpKS5tYXAocCA9PiBwLnF1ZXJ5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoaXMgcHJlZGljYXRlIGFuZCBhbGwgaXRzIHN1Yi1wcmVkaWNhdGVzIHRvIHZpc2libGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNob3dBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLl9wcmVkaWNhdGVzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBwLnNob3coKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUZpbHRlclRleHRTZWdtZW50c0dlbmVyYXRvcigpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFByZWRpY2F0ZS5jb21iaW5lVGV4dFNlZ21lbnRzV2l0aEJvb2xlYW5PcGVyYXRvcih0aGlzLl9wcmVkaWNhdGVzLnZhbHVlcygpLFxuICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdG9yLCB0aGlzLl9icmFja2V0U3ViUHJlZGljYXRlVGV4dCk7XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19