UNPKG

handsontable

Version:

Handsontable is a JavaScript Data Grid available for React, Angular and Vue.

124 lines (116 loc) 3.48 kB
"use strict"; exports.__esModule = true; var _object = require("../../../helpers/object"); var _utils = require("../utils/utils"); function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /** * Controller for managing the selected items. * * @private * @class SelectedItemsController */ class SelectedItemsController { /** * Creates a new SelectedItemsController. * * @param {Array<*>|undefined} selectedItems Array of selected items. */ constructor(selectedItems) { var _this$selectedItems; /** * Set of selected items. * * @private * @type {Set<*>} */ _defineProperty(this, "selectedItems", (_this$selectedItems = this.selectedItems) !== null && _this$selectedItems !== void 0 ? _this$selectedItems : new Set()); /** * Maximum number of selections. * * @private * @type {number} */ _defineProperty(this, "maxSelectionsCount", Infinity); if (Array.isArray(selectedItems)) { this.selectedItems = new Set(selectedItems); } else { this.selectedItems = new Set(); } } /** * Sets the maximum number of selections. * * @param {number} maxSelectionsCount Maximum number of selections. */ setMaxSelectionCount(maxSelectionsCount) { this.maxSelectionsCount = maxSelectionsCount; } /** * Adds selected values (single or array) to the set. * * @param {string|object|Array<string|object>} items Items to add. */ add(items) { if (this.selectedItems.size >= this.maxSelectionsCount) { return; } if (Array.isArray(items)) { items.forEach(item => this.selectedItems.add(item)); } else { this.selectedItems.add(items); } } /** * Removes a selected value from the set. * * @param {string|object} item Item to remove. * @returns {boolean} True if the item was removed, false otherwise. */ remove(item) { if ((0, _object.isKeyValueObject)(item)) { const itemsArray = Array.from(this.selectedItems); const foundItem = itemsArray.find(selectedItem => (0, _object.isObjectEqual)(selectedItem, item)); if (foundItem !== undefined) { this.selectedItems.delete(foundItem); return true; } } else { return this.selectedItems.delete(item); } return false; } /** * Checks if a value is in the set. * * @param {*} value Value to check. * @returns {boolean} */ has(value) { return (0, _utils.includesValue)(this.getItemsArray(), value); } /** * Clears the set. */ clear() { this.selectedItems.clear(); } /** * Gets the number of selected items. * * @returns {number} */ getSize() { return this.selectedItems.size; } /** * Gets the elements of the set. * * @returns {Array<*>} */ getItemsArray() { return Array.from(this.selectedItems); } } exports.SelectedItemsController = SelectedItemsController;