handsontable
Version:
Handsontable is a JavaScript Data Grid available for React, Angular and Vue.
124 lines (116 loc) • 3.48 kB
JavaScript
;
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;