UNPKG

handsontable

Version:

Handsontable is a JavaScript Spreadsheet Component available for React, Angular and Vue.

176 lines (136 loc) 4.17 kB
"use strict"; require("core-js/modules/es.array.from.js"); require("core-js/modules/es.array.index-of.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.array.sort.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.set.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); exports.__esModule = true; exports.sortComparison = sortComparison; exports.toVisualValue = toVisualValue; exports.createArrayAssertion = createArrayAssertion; exports.toEmptyString = toEmptyString; exports.unifyColumnValues = unifyColumnValues; exports.intersectValues = intersectValues; var _feature = require("../../helpers/feature"); var _array = require("../../helpers/array"); var sortCompare = (0, _feature.getComparisonFunction)(); /** * Comparison function for sorting purposes. * * @param {*} a The first value to compare. * @param {*} b The second value to compare. * @returns {number} Returns number from -1 to 1. */ function sortComparison(a, b) { if (typeof a === 'number' && typeof b === 'number') { return a - b; } return sortCompare(a, b); } /** * Convert raw value into visual value. * * @param {*} value The value to convert. * @param {string} defaultEmptyValue Default value for empty cells. * @returns {*} */ function toVisualValue(value, defaultEmptyValue) { var visualValue = value; if (visualValue === '') { visualValue = "(".concat(defaultEmptyValue, ")"); } return visualValue; } var SUPPORT_SET_CONSTRUCTOR = new Set([1]).has(1); var SUPPORT_FAST_DEDUPE = SUPPORT_SET_CONSTRUCTOR && typeof Array.from === 'function'; /** * Create an array assertion to compare if an element exists in that array (in a more efficient way than .indexOf). * * @param {Array} initialData Values to compare. * @returns {Function} */ function createArrayAssertion(initialData) { var dataset = initialData; if (SUPPORT_SET_CONSTRUCTOR) { dataset = new Set(dataset); } return function (value) { var result; if (SUPPORT_SET_CONSTRUCTOR) { result = dataset.has(value); } else { /* eslint-disable no-bitwise */ result = !!~dataset.indexOf(value); } return result; }; } /** * Convert empty-ish values like null and undefined to an empty string. * * @param {*} value Value to check. * @returns {string} */ function toEmptyString(value) { return value === null || value === void 0 ? '' : value; } /** * Unify column values (replace `null` and `undefined` values into empty string, unique values and sort them). * * @param {Array} values An array of values. * @returns {Array} */ function unifyColumnValues(values) { var unifiedValues = values; if (SUPPORT_FAST_DEDUPE) { unifiedValues = Array.from(new Set(unifiedValues)); } else { unifiedValues = (0, _array.arrayUnique)(unifiedValues); } unifiedValues = unifiedValues.sort(function (a, b) { if (typeof a === 'number' && typeof b === 'number') { return a - b; } if (a === b) { return 0; } return a > b ? 1 : -1; }); return unifiedValues; } /** * Intersect 'base' values with 'selected' values and return an array of object. * * @param {Array} base An array of base values. * @param {Array} selected An array of selected values. * @param {string} defaultEmptyValue Default value for empty cells. * @param {Function} [callback] A callback function which is invoked for every item in an array. * @returns {Array} */ function intersectValues(base, selected, defaultEmptyValue, callback) { var result = []; var same = base === selected; var selectedItemsAssertion; if (!same) { selectedItemsAssertion = createArrayAssertion(selected); } (0, _array.arrayEach)(base, function (value) { var checked = false; if (same || selectedItemsAssertion(value)) { checked = true; } var item = { checked: checked, value: value, visualValue: toVisualValue(value, defaultEmptyValue) }; if (callback) { callback(item); } result.push(item); }); return result; }