package.src.vaadin-grid-selection-mixin.js Maven / Gradle / Ivy
/**
* @license
* Copyright (c) 2016 - 2023 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
/**
* @polymerMixin
*/
export const SelectionMixin = (superClass) =>
class SelectionMixin extends superClass {
static get properties() {
return {
/**
* An array that contains the selected items.
* @type {!Array}
*/
selectedItems: {
type: Object,
notify: true,
value: () => [],
sync: true,
},
/**
* Set of selected item ids
* @private
*/
__selectedKeys: {
type: Object,
computed: '__computeSelectedKeys(itemIdPath, selectedItems)',
},
};
}
static get observers() {
return ['__selectedItemsChanged(itemIdPath, selectedItems)'];
}
/**
* @param {!GridItem} item
* @return {boolean}
* @protected
*/
_isSelected(item) {
return this.__selectedKeys.has(this.getItemId(item));
}
/**
* Selects the given item.
*
* @method selectItem
* @param {!GridItem} item The item object
*/
selectItem(item) {
if (!this._isSelected(item)) {
this.selectedItems = [...this.selectedItems, item];
}
}
/**
* Deselects the given item if it is already selected.
*
* @method deselect
* @param {!GridItem} item The item object
*/
deselectItem(item) {
if (this._isSelected(item)) {
this.selectedItems = this.selectedItems.filter((i) => !this._itemsEqual(i, item));
}
}
/**
* Toggles the selected state of the given item.
*
* @method toggle
* @param {!GridItem} item The item object
* @protected
*/
_toggleItem(item) {
if (!this._isSelected(item)) {
this.selectItem(item);
} else {
this.deselectItem(item);
}
}
/** @private */
__selectedItemsChanged() {
this.requestContentUpdate();
}
/** @private */
__computeSelectedKeys(itemIdPath, selectedItems) {
const selected = selectedItems || [];
const selectedKeys = new Set();
selected.forEach((item) => {
selectedKeys.add(this.getItemId(item));
});
return selectedKeys;
}
/**
* Fired when the `selectedItems` property changes.
*
* @event selected-items-changed
*/
};