@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
74 lines • 8.51 kB
JavaScript
/**
* 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==