UNPKG

predix-ui

Version:

px-* web components as React styled components

79 lines (78 loc) 2.21 kB
export default class IronSelection { constructor(props) { this.selection = []; this.selectCallback = props && props.selectCallback; } /** * Retrieves the selected item(s). * * @method get * @returns Returns the selected item(s). If the multi property is true, * `get` will return an array, otherwise it will return * the selected item or undefined if there is no selection. */ get() { return this.multi ? this.selection.slice() : this.selection[0]; } /** * Clears all the selection except the ones indicated. * * @method clear * @param {Array} excludes items to be excluded. */ clear(excludes) { this.selection.slice().forEach(function (item) { if (!excludes || excludes.indexOf(item) < 0) { this.setItemSelected(item, false); } }, this); } /** * Indicates if a given item is selected. * * @method isSelected * @param {*} item The item whose selection state should be checked. * @returns Returns true if `item` is selected. */ isSelected(item) { return this.selection.indexOf(item) >= 0; } /** * Sets the selection state for a given item to either selected or deselected. * * @method setItemSelected * @param {*} item The item to select. * @param {boolean} isSelected True for selected, false for deselected. */ setItemSelected(item, isSelected) { if (item != null) { if (isSelected !== this.isSelected(item)) { // proceed to update selection only if requested state differs from current if (isSelected) { this.selection.push(item); } else { const i = this.selection.indexOf(item); if (i >= 0) { this.selection.splice(i, 1); } } if (this.selectCallback) { this.selectCallback(item, isSelected); } } } } select(item) { if (this.multi) { this.toggle(item); } else if (this.get() !== item) { this.setItemSelected(this.get(), false); this.setItemSelected(item, true); } } toggle(item) { this.setItemSelected(item, !this.isSelected(item)); } }