@gooddata/gooddata-js
Version:
GoodData JavaScript SDK
75 lines (74 loc) • 2.83 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// (C) 2007-2018 GoodData Corporation
var cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
var isEmpty_1 = __importDefault(require("lodash/isEmpty"));
var typings_1 = require("@gooddata/typings");
var isDateFilter = typings_1.AFM.isDateFilter;
var isNegativeAttributeFilter = typings_1.AFM.isNegativeAttributeFilter;
var isPositiveAttributeFilter = typings_1.AFM.isPositiveAttributeFilter;
/**
* Tests whether attribute elements are empty of not.
*
* @param elements one of the acceptable attribute element forms
*/
function isEmptyAttributeElements(elements) {
return isEmpty_1.default(elements);
}
exports.isEmptyAttributeElements = isEmptyAttributeElements;
/**
* Tests whether filter if semantically empty - e.g. it will not have any effect on the results and can thus
* be discarded.
*
* @param filter any acceptable AFM filter
*/
function isEmptyFilter(filter) {
if (isPositiveAttributeFilter(filter)) {
return isEmptyAttributeElements(filter.positiveAttributeFilter.in);
}
else if (isNegativeAttributeFilter(filter)) {
return isEmptyAttributeElements(filter.negativeAttributeFilter.notIn);
}
// expression filters were always considered empty
return !isDateFilter(filter);
}
exports.isEmptyFilter = isEmptyFilter;
/**
* Tests whether filter is semantically not empty - e.g. it will have some effect on the results.
*
* @param filter any acceptable AFM filter
* @deprecated use isEmptyFilter instead
*/
function isNotEmptyFilter(filter) {
return !isEmptyFilter(filter);
}
exports.isNotEmptyFilter = isNotEmptyFilter;
/**
* Merges new filters into existing AFM. This essentially concatenates/appends new filters at the end of the
* existing filter list defined in the AFM and then filters out any semantically empty, no-effect filters.
*
* This function is immutable, it constructs new instance of AFM.
*
* @param afm afm to merge filters into
* @param filters filters to merge
* @returns new instance of AFM.
*/
function mergeFilters(afm, filters) {
var cloned = cloneDeep_1.default(afm);
return __assign({}, cloned, { filters: (cloned.filters || []).concat(filters).filter(isNotEmptyFilter) });
}
exports.mergeFilters = mergeFilters;