UNPKG

@gooddata/gooddata-js

Version:
75 lines (74 loc) 2.83 kB
"use strict"; 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;