UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

309 lines (302 loc) • 11.6 kB
/** * DevExtreme (ui/pivot_grid/ui.pivot_grid.utils.js) * Version: 20.1.7 * Build date: Tue Aug 25 2020 * * Copyright (c) 2012 - 2020 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var _type = require("../../core/utils/type"); var _ajax = require("../../core/utils/ajax"); var _data = require("../../core/utils/data"); var _iterator = require("../../core/utils/iterator"); var _extend = require("../../core/utils/extend"); var _date = require("../../localization/date"); var _format_helper = require("../../format_helper"); var _data_source = require("../../data/data_source/data_source"); var _array_store = require("../../data/array_store"); var _array_store2 = _interopRequireDefault(_array_store); var _deferred = require("../../core/utils/deferred"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj } } var setFieldProperty = exports.setFieldProperty = function(field, property, value, isInitialization) { var initProperties = field._initProperties = field._initProperties || {}; var initValue = isInitialization ? value : field[property]; if (!Object.prototype.hasOwnProperty.call(initProperties, property) || isInitialization) { initProperties[property] = initValue } field[property] = value }; exports.sendRequest = function(options) { return (0, _ajax.sendRequest)(options) }; var foreachTreeAsyncDate = new Date; function createForeachTreeFunc(isAsync) { var foreachTreeFunc = function foreachTreeFunc(items, callback, parentAtFirst, members, index, isChildrenProcessing) { members = members || []; items = items || []; var i; var deferred; index = index || 0; function createForeachTreeAsyncHandler(deferred, i, isChildrenProcessing) { (0, _deferred.when)(foreachTreeFunc(items, callback, parentAtFirst, members, i, isChildrenProcessing)).done(deferred.resolve) } for (i = index; i < items.length; i++) { if (isAsync && i > index && i % 1e4 === 0 && new Date - foreachTreeAsyncDate >= 300) { foreachTreeAsyncDate = new Date; deferred = new _deferred.Deferred; setTimeout(createForeachTreeAsyncHandler(deferred, i, false), 0); return deferred } var item = items[i]; if (!isChildrenProcessing) { members.unshift(item); if (parentAtFirst && false === callback(members, i)) { return } if (item.children) { var childrenDeferred = foreachTreeFunc(item.children, callback, parentAtFirst, members); if (isAsync && childrenDeferred) { deferred = new _deferred.Deferred; childrenDeferred.done(createForeachTreeAsyncHandler(deferred, i, true)); return deferred } } } isChildrenProcessing = false; if (!parentAtFirst && false === callback(members, i)) { return } members.shift(); if (items[i] !== item) { i-- } } }; return foreachTreeFunc } exports.foreachTree = createForeachTreeFunc(false); exports.foreachTreeAsync = createForeachTreeFunc(true); exports.findField = function(fields, id) { if (fields && (0, _type.isDefined)(id)) { for (var i = 0; i < fields.length; i++) { var field = fields[i]; if (field.name === id || field.caption === id || field.dataField === id || field.index === id) { return i } } } return -1 }; exports.formatValue = function(value, options) { var valueText = value === value && (0, _format_helper.format)(value, options.format); var formatObject = { value: value, valueText: valueText || "" }; return options.customizeText ? options.customizeText.call(options, formatObject) : formatObject.valueText }; exports.getCompareFunction = function(valueSelector) { return function(a, b) { var result = 0; var valueA = valueSelector(a); var valueB = valueSelector(b); var aIsDefined = (0, _type.isDefined)(valueA); var bIsDefined = (0, _type.isDefined)(valueB); if (aIsDefined && bIsDefined) { if (valueA > valueB) { result = 1 } else { if (valueA < valueB) { result = -1 } } } if (aIsDefined && !bIsDefined) { result = 1 } if (!aIsDefined && bIsDefined) { result = -1 } return result } }; exports.createPath = function(items) { var result = []; for (var i = items.length - 1; i >= 0; i--) { result.push(items[i].key || items[i].value) } return result }; exports.foreachDataLevel = function foreachDataLevel(data, callback, index, childrenField) { index = index || 0; childrenField = childrenField || "children"; if (data.length) { callback(data, index) } for (var i = 0; i < data.length; i++) { var item = data[i]; if (item[childrenField] && item[childrenField].length) { foreachDataLevel(item[childrenField], callback, index + 1, childrenField) } } }; exports.mergeArraysByMaxValue = function(values1, values2) { var result = []; for (var i = 0; i < values1.length; i++) { result.push(Math.max(values1[i] || 0, values2[i] || 0)) } return result }; exports.getExpandedLevel = function(options, axisName) { var dimensions = options[axisName]; var expandLevel = 0; var expandedPaths = ("columns" === axisName ? options.columnExpandedPaths : options.rowExpandedPaths) || []; if (options.headerName === axisName) { expandLevel = options.path.length } else { if (options.headerName && options.headerName !== axisName && options.oppositePath) { expandLevel = options.oppositePath.length } else { (0, _iterator.each)(expandedPaths, function(_, path) { expandLevel = Math.max(expandLevel, path.length) }) } } while (dimensions[expandLevel + 1] && dimensions[expandLevel].expanded) { expandLevel++ } return expandLevel }; function createGroupFields(item) { return (0, _iterator.map)(["year", "quarter", "month"], function(value, index) { return (0, _extend.extend)({}, item, { groupInterval: value, groupIndex: index }) }) } function parseFields(dataSource, fieldsList, path, fieldsDataType) { var result = []; Object.keys(fieldsList || []).forEach(function(field) { if (field && 0 === field.indexOf("__")) { return } var dataIndex = 1; var currentPath = path.length ? path + "." + field : field; var dataType = fieldsDataType[currentPath]; var getter = (0, _data.compileGetter)(currentPath); var value = fieldsList[field]; var items; while (!(0, _type.isDefined)(value) && dataSource[dataIndex]) { value = getter(dataSource[dataIndex]); dataIndex++ } if (!dataType && (0, _type.isDefined)(value)) { dataType = (0, _type.type)(value) } items = [{ dataField: currentPath, dataType: dataType, groupName: "date" === dataType ? field : void 0, groupInterval: void 0, displayFolder: path }]; if ("date" === dataType) { items = items.concat(createGroupFields(items[0])) } else { if ("object" === dataType) { items = parseFields(dataSource, value, currentPath, fieldsDataType) } } result.push.apply(result, items) }); return result } exports.discoverObjectFields = function(items, fields) { var fieldsDataType = exports.getFieldsDataType(fields); return parseFields(items, items[0], "", fieldsDataType) }; exports.getFieldsDataType = function(fields) { var result = {}; (0, _iterator.each)(fields, function(_, field) { result[field.dataField] = result[field.dataField] || field.dataType }); return result }; var DATE_INTERVAL_FORMATS = { month: function(value) { return (0, _date.getMonthNames)()[value - 1] }, quarter: function(value) { return (0, _date.format)(new Date(2e3, 3 * value - 1), "quarter") }, dayOfWeek: function(value) { return (0, _date.getDayNames)()[value] } }; exports.setDefaultFieldValueFormatting = function(field) { if ("date" === field.dataType) { if (!field.format) { setFieldProperty(field, "format", DATE_INTERVAL_FORMATS[field.groupInterval]) } } else { if ("number" === field.dataType) { var groupInterval = (0, _type.isNumeric)(field.groupInterval) && field.groupInterval > 0 && field.groupInterval; if (groupInterval && !field.customizeText) { setFieldProperty(field, "customizeText", function(formatObject) { var secondValue = formatObject.value + groupInterval; var secondValueText = (0, _format_helper.format)(secondValue, field.format); return formatObject.valueText && secondValueText ? formatObject.valueText + " - " + secondValueText : "" }) } } } }; exports.getFiltersByPath = function(fields, path) { var result = []; path = path || []; for (var i = 0; i < path.length; i++) { result.push((0, _extend.extend)({}, fields[i], { groupIndex: null, groupName: null, filterType: "include", filterValues: [path[i]] })) } return result }; exports.storeDrillDownMixin = { createDrillDownDataSource: function(descriptions, params) { var items = this.getDrillDownItems(descriptions, params); var arrayStore; function createCustomStoreMethod(methodName) { return function(options) { var d; if (arrayStore) { d = arrayStore[methodName](options) } else { d = new _deferred.Deferred; (0, _deferred.when)(items).done(function(data) { var arrayStore = new _array_store2.default(data); arrayStore[methodName](options).done(d.resolve).fail(d.reject) }).fail(d.reject) } return d } } var dataSource = new _data_source.DataSource({ load: createCustomStoreMethod("load"), totalCount: createCustomStoreMethod("totalCount"), key: this.key() }); return dataSource } }; exports.capitalizeFirstLetter = function(string) { return string.charAt(0).toUpperCase() + string.slice(1) };