@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
88 lines • 10.6 kB
JavaScript
import { Predicate } from './predicate';
import { Query } from '../query/query';
/**
* Represents a clause of {@link Predicate}s combined with a {@link BooleanOperator}.
*/
export class ClausePredicate extends Predicate {
_operator;
_bracketSubPredicateText;
/**
* Stores the {@link Predicate}s that this Predicate combines.
*/
_predicates;
/**
* Stores the resulting query of this Predicate.
*/
_query;
/**
* @param predicates Predicates that should be combined into one
* @param _operator Operator that is used to combine the predicates
* @param initiallyVisible whether the predicate should be initially displayed or not
* @param _bracketSubPredicateText whether the individual sub predicates are wrapped in brackets when a textual representation
* is generated
*/
constructor(predicates, _operator, initiallyVisible = true, _bracketSubPredicateText = false) {
super(initiallyVisible);
this._operator = _operator;
this._bracketSubPredicateText = _bracketSubPredicateText;
this._predicates = [];
this._predicates.push(...predicates);
this.updateQuery();
this.initializeFilterTextSegmentsGenerator();
}
get query() {
return this._query;
}
/**
* Adds another {@link Predicate} to the clause and updates this {@link Predicate}'s {@link Query}.
* @param newPredicate - the Predicate that should be added to the clause
* @returns the index of the added Predicate, that can be used to remove it.
* Note that removing predicates with a lower index shifts the order of indices.
*/
addPredicate(newPredicate) {
this._predicates.push(newPredicate);
this.updateQuery();
return this._predicates.length - 1;
}
/**
* Removes the {@link Predicate} at the given `index` from this clause and updates this {@link Predicate}'s {@link Query}.
* If the `index` is invalid does nothing.
* @param index index of the {@link Predicate} in this clause that should be removed
* @returns whether a predicate was removed, or not
*/
removePredicate(index) {
if (index >= 0 && index < this._predicates.length) {
this._predicates.splice(index, 1);
this.updateQuery();
return true;
}
return false;
}
/**
* Sets this predicate and all its sub-predicates to visible.
*/
showAll() {
this.show();
this._predicates.forEach(p => p.show());
}
/**
* 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 this._predicates.map(p => p.query);
}
initializeFilterTextSegmentsGenerator() {
this._filterTextSegmentsGenerator = () => {
return Predicate.combineTextSegmentsWithBooleanOperator(this._predicates, this._operator, this._bracketSubPredicateText);
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhdXNlLXByZWRpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvc2VhcmNoL21vZGVscy9wcmVkaWNhdGUvY2xhdXNlLXByZWRpY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFNBQVM7SUFtQnBCO0lBRUE7SUFuQnRCOztPQUVHO0lBQ08sV0FBVyxDQUFtQjtJQUN4Qzs7T0FFRztJQUNPLE1BQU0sQ0FBUTtJQUV4Qjs7Ozs7O09BTUc7SUFDSCxZQUFZLFVBQTRCLEVBQ2xCLFNBQTBCLEVBQ3BDLGdCQUFnQixHQUFHLElBQUksRUFDYiwyQkFBMkIsS0FBSztRQUNsRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUhOLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBRTFCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBUTtRQUVsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMscUNBQXFDLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxZQUF1QjtRQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksZUFBZSxDQUFDLEtBQWE7UUFDaEMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1YsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLFdBQVc7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7T0FFRztJQUNILElBQWMsT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxxQ0FBcUM7UUFDekMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsRUFBRTtZQUNyQyxPQUFPLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDN0gsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcmVkaWNhdGV9IGZyb20gJy4vcHJlZGljYXRlJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5JztcbmltcG9ydCB7Qm9vbGVhbk9wZXJhdG9yfSBmcm9tICcuLi9ib29sZWFuLW9wZXJhdG9yJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2xhdXNlIG9mIHtAbGluayBQcmVkaWNhdGV9cyBjb21iaW5lZCB3aXRoIGEge0BsaW5rIEJvb2xlYW5PcGVyYXRvcn0uXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGF1c2VQcmVkaWNhdGUgZXh0ZW5kcyBQcmVkaWNhdGUge1xuXG4gICAgLyoqXG4gICAgICogU3RvcmVzIHRoZSB7QGxpbmsgUHJlZGljYXRlfXMgdGhhdCB0aGlzIFByZWRpY2F0ZSBjb21iaW5lcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3ByZWRpY2F0ZXM6IEFycmF5PFByZWRpY2F0ZT47XG4gICAgLyoqXG4gICAgICogU3RvcmVzIHRoZSByZXN1bHRpbmcgcXVlcnkgb2YgdGhpcyBQcmVkaWNhdGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9xdWVyeTogUXVlcnk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcHJlZGljYXRlcyBQcmVkaWNhdGVzIHRoYXQgc2hvdWxkIGJlIGNvbWJpbmVkIGludG8gb25lXG4gICAgICogQHBhcmFtIF9vcGVyYXRvciBPcGVyYXRvciB0aGF0IGlzIHVzZWQgdG8gY29tYmluZSB0aGUgcHJlZGljYXRlc1xuICAgICAqIEBwYXJhbSBpbml0aWFsbHlWaXNpYmxlIHdoZXRoZXIgdGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgaW5pdGlhbGx5IGRpc3BsYXllZCBvciBub3RcbiAgICAgKiBAcGFyYW0gX2JyYWNrZXRTdWJQcmVkaWNhdGVUZXh0IHdoZXRoZXIgdGhlIGluZGl2aWR1YWwgc3ViIHByZWRpY2F0ZXMgYXJlIHdyYXBwZWQgaW4gYnJhY2tldHMgd2hlbiBhIHRleHR1YWwgcmVwcmVzZW50YXRpb25cbiAgICAgKiBpcyBnZW5lcmF0ZWRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwcmVkaWNhdGVzOiBBcnJheTxQcmVkaWNhdGU+LFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfb3BlcmF0b3I6IEJvb2xlYW5PcGVyYXRvcixcbiAgICAgICAgICAgICAgICBpbml0aWFsbHlWaXNpYmxlID0gdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2JyYWNrZXRTdWJQcmVkaWNhdGVUZXh0ID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoaW5pdGlhbGx5VmlzaWJsZSk7XG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fcHJlZGljYXRlcy5wdXNoKC4uLnByZWRpY2F0ZXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZpbHRlclRleHRTZWdtZW50c0dlbmVyYXRvcigpO1xuICAgIH1cblxuICAgIGdldCBxdWVyeSgpOiBRdWVyeSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFub3RoZXIge0BsaW5rIFByZWRpY2F0ZX0gdG8gdGhlIGNsYXVzZSBhbmQgdXBkYXRlcyB0aGlzIHtAbGluayBQcmVkaWNhdGV9J3Mge0BsaW5rIFF1ZXJ5fS5cbiAgICAgKiBAcGFyYW0gbmV3UHJlZGljYXRlIC0gdGhlIFByZWRpY2F0ZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgY2xhdXNlXG4gICAgICogQHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBhZGRlZCBQcmVkaWNhdGUsIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIGl0LlxuICAgICAqIE5vdGUgdGhhdCByZW1vdmluZyBwcmVkaWNhdGVzIHdpdGggYSBsb3dlciBpbmRleCBzaGlmdHMgdGhlIG9yZGVyIG9mIGluZGljZXMuXG4gICAgICovXG4gICAgcHVibGljIGFkZFByZWRpY2F0ZShuZXdQcmVkaWNhdGU6IFByZWRpY2F0ZSk6IG51bWJlciB7XG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZXMucHVzaChuZXdQcmVkaWNhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVF1ZXJ5KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVkaWNhdGVzLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUge0BsaW5rIFByZWRpY2F0ZX0gYXQgdGhlIGdpdmVuIGBpbmRleGAgZnJvbSB0aGlzIGNsYXVzZSBhbmQgdXBkYXRlcyB0aGlzIHtAbGluayBQcmVkaWNhdGV9J3Mge0BsaW5rIFF1ZXJ5fS5cbiAgICAgKiBJZiB0aGUgYGluZGV4YCBpcyBpbnZhbGlkIGRvZXMgbm90aGluZy5cbiAgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIHtAbGluayBQcmVkaWNhdGV9IGluIHRoaXMgY2xhdXNlIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIGEgcHJlZGljYXRlIHdhcyByZW1vdmVkLCBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlUHJlZGljYXRlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLl9wcmVkaWNhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fcHJlZGljYXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVyeSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhpcyBwcmVkaWNhdGUgYW5kIGFsbCBpdHMgc3ViLXByZWRpY2F0ZXMgdG8gdmlzaWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd0FsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZXMuZm9yRWFjaChwID0+IHAuc2hvdygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgW19xdWVyeV17QGxpbmsgQ2xhdXNlUHJlZGljYXRlI19xdWVyeX0gYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogU2VlIFtjb21iaW5lUXVlcmllcygpXXtAbGluayBRdWVyeSNjb21iaW5lUXVlcmllc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVF1ZXJ5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9xdWVyeSA9IFF1ZXJ5LmNvbWJpbmVRdWVyaWVzKHRoaXMucXVlcmllcywgdGhpcy5fb3BlcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBgQXJyYXlgIG9mIHtAbGluayBRdWVyeX0gb2JqZWN0cyBzdG9yZWQgd2l0aGluIHRoaXMgb2JqZWN0J3MgW19wcmVkaWNhdGVzXXtAbGluayBDbGF1c2VQcmVkaWNhdGUjX3ByZWRpY2F0ZXN9IGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHF1ZXJpZXMoKTogQXJyYXk8UXVlcnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWRpY2F0ZXMubWFwKHAgPT4gcC5xdWVyeSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRmlsdGVyVGV4dFNlZ21lbnRzR2VuZXJhdG9yKCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJUZXh0U2VnbWVudHNHZW5lcmF0b3IgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gUHJlZGljYXRlLmNvbWJpbmVUZXh0U2VnbWVudHNXaXRoQm9vbGVhbk9wZXJhdG9yKHRoaXMuX3ByZWRpY2F0ZXMsIHRoaXMuX29wZXJhdG9yLCB0aGlzLl9icmFja2V0U3ViUHJlZGljYXRlVGV4dCk7XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19