UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

74 lines 8.51 kB
/** * Abstraction of queries, so that their implementation can be replaced as needed. */ export class Query { _value; _empty; /** * @param _value see [value]{@link Query#value} for the specification of this attribute. * @param _empty use `true` if the Query object represents an empty query */ constructor(_value, _empty = false) { this._value = _value; this._empty = _empty; if (!this._value || this._value === '') { this._empty = true; } } /** * @returns an Elastic search Query string query wrapped in braces. * * See Elasticsearch's * [documentation]{@link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html} * for more information about Query string queries. */ get value() { return this._value; } /** * @returns whether this Query object represents an empty query or not */ get isEmpty() { return this._empty; } /** * Combines multiple queries into one with the provided operator. * @param queries queries that should be combined. Empty queries in the input array are ignored. * @param operator operator that is used to combine the queries * @returns a single query that is the combination of the non-empty queries in the input array. If the input array is empty an * [empty query]{@link Query#emptyQuery} will be returned. */ static combineQueries(queries, operator) { const realQueries = queries.filter(q => !q.isEmpty); if (realQueries.length === 0) { return Query.emptyQuery(); } if (realQueries.length === 1) { return new Query(realQueries[0].value); } const combinedQuery = realQueries.map(q => q.value).join(` ${operator} `); return new Query(`(${combinedQuery})`); } /** * Returns a `Query` with it's `value` set to an empty string. */ static emptyQuery() { return new Query('', true); } /** * @param query the query that should be compared * @returns `true` if and only if the queries are equal. * Returns `false` if the queries are not equal, or if attempting to tell the queries apart is too complicated. * More specifically the method can always tell apart empty queries and if poth queries are non-empty then their values are compared. */ equals(query) { if (this.isEmpty && query.isEmpty) { return true; } if (this.isEmpty || query.isEmpty) { return false; } return this.value === query.value; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NlYXJjaC9tb2RlbHMvcXVlcnkvcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sS0FBSztJQUtNO0lBQXdCO0lBSjVDOzs7T0FHRztJQUNILFlBQW9CLE1BQWMsRUFBVSxTQUFTLEtBQUs7UUFBdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFxQixFQUFFLFFBQXlCO1FBQ3pFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztRQUNELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUMxRSxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVTtRQUNwQixPQUFPLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBWTtRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDL0IsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN0QyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jvb2xlYW5PcGVyYXRvcn0gZnJvbSAnLi4vYm9vbGVhbi1vcGVyYXRvcic7XG5cbi8qKlxuICogQWJzdHJhY3Rpb24gb2YgcXVlcmllcywgc28gdGhhdCB0aGVpciBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgcmVwbGFjZWQgYXMgbmVlZGVkLlxuICovXG5leHBvcnQgY2xhc3MgUXVlcnkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBfdmFsdWUgc2VlIFt2YWx1ZV17QGxpbmsgUXVlcnkjdmFsdWV9IGZvciB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGlzIGF0dHJpYnV0ZS5cbiAgICAgKiBAcGFyYW0gX2VtcHR5IHVzZSBgdHJ1ZWAgaWYgdGhlIFF1ZXJ5IG9iamVjdCByZXByZXNlbnRzIGFuIGVtcHR5IHF1ZXJ5XG4gICAgICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdmFsdWU6IHN0cmluZywgcHJpdmF0ZSBfZW1wdHkgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlIHx8IHRoaXMuX3ZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5fZW1wdHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gRWxhc3RpYyBzZWFyY2ggUXVlcnkgc3RyaW5nIHF1ZXJ5IHdyYXBwZWQgaW4gYnJhY2VzLlxuICAgICAqXG4gICAgICogU2VlIEVsYXN0aWNzZWFyY2gnc1xuICAgICAqIFtkb2N1bWVudGF0aW9uXXtAbGluayBodHRwczovL3d3dy5lbGFzdGljLmNvL2d1aWRlL2VuL2VsYXN0aWNzZWFyY2gvcmVmZXJlbmNlL2N1cnJlbnQvcXVlcnktZHNsLXF1ZXJ5LXN0cmluZy1xdWVyeS5odG1sfVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFF1ZXJ5IHN0cmluZyBxdWVyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhpcyBRdWVyeSBvYmplY3QgcmVwcmVzZW50cyBhbiBlbXB0eSBxdWVyeSBvciBub3RcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21iaW5lcyBtdWx0aXBsZSBxdWVyaWVzIGludG8gb25lIHdpdGggdGhlIHByb3ZpZGVkIG9wZXJhdG9yLlxuICAgICAqIEBwYXJhbSBxdWVyaWVzIHF1ZXJpZXMgdGhhdCBzaG91bGQgYmUgY29tYmluZWQuIEVtcHR5IHF1ZXJpZXMgaW4gdGhlIGlucHV0IGFycmF5IGFyZSBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSBvcGVyYXRvciBvcGVyYXRvciB0aGF0IGlzIHVzZWQgdG8gY29tYmluZSB0aGUgcXVlcmllc1xuICAgICAqIEByZXR1cm5zIGEgc2luZ2xlIHF1ZXJ5IHRoYXQgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBub24tZW1wdHkgcXVlcmllcyBpbiB0aGUgaW5wdXQgYXJyYXkuIElmIHRoZSBpbnB1dCBhcnJheSBpcyBlbXB0eSBhblxuICAgICAqIFtlbXB0eSBxdWVyeV17QGxpbmsgUXVlcnkjZW1wdHlRdWVyeX0gd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNvbWJpbmVRdWVyaWVzKHF1ZXJpZXM6IEFycmF5PFF1ZXJ5Piwgb3BlcmF0b3I6IEJvb2xlYW5PcGVyYXRvcik6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3QgcmVhbFF1ZXJpZXMgPSBxdWVyaWVzLmZpbHRlcihxID0+ICFxLmlzRW1wdHkpO1xuICAgICAgICBpZiAocmVhbFF1ZXJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUXVlcnkuZW1wdHlRdWVyeSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWFsUXVlcmllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUXVlcnkocmVhbFF1ZXJpZXNbMF0udmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkUXVlcnkgPSByZWFsUXVlcmllcy5tYXAocSA9PiBxLnZhbHVlKS5qb2luKGAgJHtvcGVyYXRvcn0gYCk7XG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoYCgke2NvbWJpbmVkUXVlcnl9KWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBgUXVlcnlgIHdpdGggaXQncyBgdmFsdWVgIHNldCB0byBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlbXB0eVF1ZXJ5KCk6IFF1ZXJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeSgnJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHF1ZXJ5IHRoZSBxdWVyeSB0aGF0IHNob3VsZCBiZSBjb21wYXJlZFxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbmQgb25seSBpZiB0aGUgcXVlcmllcyBhcmUgZXF1YWwuXG4gICAgICogUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBxdWVyaWVzIGFyZSBub3QgZXF1YWwsIG9yIGlmIGF0dGVtcHRpbmcgdG8gdGVsbCB0aGUgcXVlcmllcyBhcGFydCBpcyB0b28gY29tcGxpY2F0ZWQuXG4gICAgICogTW9yZSBzcGVjaWZpY2FsbHkgdGhlIG1ldGhvZCBjYW4gYWx3YXlzIHRlbGwgYXBhcnQgZW1wdHkgcXVlcmllcyBhbmQgaWYgcG90aCBxdWVyaWVzIGFyZSBub24tZW1wdHkgdGhlbiB0aGVpciB2YWx1ZXMgYXJlIGNvbXBhcmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcXVhbHMocXVlcnk6IFF1ZXJ5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkgJiYgcXVlcnkuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSB8fCBxdWVyeS5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IHF1ZXJ5LnZhbHVlO1xuICAgIH1cbn1cbiJdfQ==