1 | {"version":3,"file":"Selection.js","sourceRoot":"../src/","sources":["selection/Selection.ts"],"names":[],"mappings":"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","sourcesContent":["import { IObjectWithKey, ISelection, SELECTION_CHANGE, SELECTION_ITEMS_CHANGE, SelectionMode } from './Selection.types';\nimport { EventGroup } from '../EventGroup';\n\n/**\n * {@docCategory Selection}\n */\nexport interface ISelectionOptions<TItem = IObjectWithKey> {\n onSelectionChanged?: () => void;\n onItemsChanged?: () => void;\n /** Custom logic to generate item keys. Required if `TItem` does not have a `key` property. */\n getKey?: (item: TItem, index?: number) => string | number;\n canSelectItem?: (item: TItem, index?: number) => boolean;\n selectionMode?: SelectionMode;\n items?: TItem[];\n}\n\n/**\n * Selection options with required `getKey` property.\n * {@docCategory Selection}\n */\nexport type ISelectionOptionsWithRequiredGetKey<TItem> = ISelectionOptions<TItem> &\n Required<Pick<ISelectionOptions<TItem>, 'getKey'>>;\n\n/**\n * {@docCategory Selection}\n */\nexport class Selection<TItem = IObjectWithKey> implements ISelection<TItem> {\n /** Number of items selected. Do not modify. */\n public count: number;\n public readonly mode: SelectionMode;\n\n private _getKey: (item: TItem, index?: number) => string | number;\n private _canSelectItem: (item: TItem, index?: number) => boolean;\n\n private _changeEventSuppressionCount: number;\n private _items: TItem[];\n private _selectedItems: TItem[] | null;\n private _selectedIndices: number[] | undefined;\n private _isAllSelected: boolean;\n private _exemptedIndices: { [index: string]: boolean };\n private _exemptedCount: number;\n private _keyToIndexMap: { [key: string]: number };\n private _anchoredIndex: number;\n private _onSelectionChanged: (() => void) | undefined;\n private _onItemsChanged: (() => void) | undefined;\n private _hasChanged!: boolean;\n private _unselectableIndices!: { [index: string]: boolean };\n private _unselectableCount: number;\n private _isModal: boolean;\n\n /**\n * Create a new Selection. If `TItem` does not have a `key` property, you must provide an options\n * object with a `getKey` implementation. Providing options is optional otherwise.\n * (At most one `options` object is accepted.)\n */\n constructor(\n ...options: TItem extends IObjectWithKey // If the item type has a built-in key...\n ? [] | [ISelectionOptions<TItem>] // Then the arguments can be empty or have the options without `getKey`\n : [ISelectionOptionsWithRequiredGetKey<TItem>] // Otherwise, arguments require options with `getKey`.\n ) {\n const {\n onSelectionChanged,\n onItemsChanged,\n getKey,\n canSelectItem = () => true,\n items,\n selectionMode = SelectionMode.multiple,\n } = options[0] || ({} as ISelectionOptions<TItem>);\n\n this.mode = selectionMode;\n\n this._getKey = getKey || defaultGetKey;\n\n this._changeEventSuppressionCount = 0;\n this._exemptedCount = 0;\n this._anchoredIndex = 0;\n this._unselectableCount = 0;\n\n this._onSelectionChanged = onSelectionChanged;\n this._onItemsChanged = onItemsChanged;\n this._canSelectItem = canSelectItem;\n this._keyToIndexMap = {};\n\n this._isModal = false;\n\n this.setItems(items || [], true);\n\n this.count = this.getSelectedCount();\n }\n\n public canSelectItem(item: TItem, index?: number): boolean {\n if (typeof index === 'number' && index < 0) {\n return false;\n }\n\n return this._canSelectItem(item, index);\n }\n\n public getKey(item: TItem, index?: number): string {\n const key = this._getKey(item, index);\n\n return typeof key === 'number' || key ? `${key}` : '';\n }\n\n public setChangeEvents(isEnabled: boolean, suppressChange?: boolean): void {\n this._changeEventSuppressionCount += isEnabled ? -1 : 1;\n\n if (this._changeEventSuppressionCount === 0 && this._hasChanged) {\n this._hasChanged = false;\n\n if (!suppressChange) {\n this._change();\n }\n }\n }\n\n public isModal(): boolean {\n return this._isModal;\n }\n\n public setModal(isModal: boolean): void {\n if (this._isModal !== isModal) {\n this.setChangeEvents(false);\n\n this._isModal = isModal;\n\n if (!isModal) {\n this.setAllSelected(false);\n }\n\n this._change();\n\n this.setChangeEvents(true);\n }\n }\n\n /**\n * Selection needs the items, call this method to set them. If the set\n * of items is the same, this will re-evaluate selection and index maps.\n * Otherwise, shouldClear should be set to true, so that selection is\n * cleared.\n */\n public setItems(items: TItem[], shouldClear: boolean = true): void {\n const newKeyToIndexMap: { [key: string]: number } = {};\n const newUnselectableIndices: { [key: string]: boolean } = {};\n let hasSelectionChanged = false;\n\n this.setChangeEvents(false);\n\n // Reset the unselectable count.\n this._unselectableCount = 0;\n\n let haveItemsChanged = false;\n\n // Build lookup table for quick selection evaluation.\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n\n if (item) {\n const key = this.getKey(item, i);\n\n if (key) {\n if (!haveItemsChanged && (!(key in this._keyToIndexMap) || this._keyToIndexMap[key] !== i)) {\n haveItemsChanged = true;\n }\n\n newKeyToIndexMap[key] = i;\n }\n }\n\n newUnselectableIndices[i] = item && !this.canSelectItem(item);\n if (newUnselectableIndices[i]) {\n this._unselectableCount++;\n }\n }\n\n if (shouldClear || items.length === 0) {\n this._setAllSelected(false, true);\n }\n\n // Check the exemption list for discrepencies.\n const newExemptedIndicies: { [key: string]: boolean } = {};\n let newExemptedCount = 0;\n\n for (const indexProperty in this._exemptedIndices) {\n if (this._exemptedIndices.hasOwnProperty(indexProperty)) {\n const index = Number(indexProperty);\n const item = this._items[index];\n const exemptKey = item ? this.getKey(item, Number(index)) : undefined;\n const newIndex = exemptKey ? newKeyToIndexMap[exemptKey] : index;\n\n if (newIndex === undefined) {\n // The item has likely been replaced or removed.\n hasSelectionChanged = true;\n } else {\n // We know the new index of the item. update the existing exemption table.\n newExemptedIndicies[newIndex] = true;\n newExemptedCount++;\n hasSelectionChanged = hasSelectionChanged || newIndex !== index;\n }\n }\n }\n\n if (this._items && this._exemptedCount === 0 && items.length !== this._items.length && this._isAllSelected) {\n // If everything was selected but the number of items has changed, selection has changed.\n hasSelectionChanged = true;\n }\n\n if (!haveItemsChanged) {\n for (const key of Object.keys(this._keyToIndexMap)) {\n if (!(key in newKeyToIndexMap)) {\n haveItemsChanged = true;\n break;\n }\n }\n }\n\n this._exemptedIndices = newExemptedIndicies;\n this._exemptedCount = newExemptedCount;\n this._keyToIndexMap = newKeyToIndexMap;\n this._unselectableIndices = newUnselectableIndices;\n this._items = items;\n this._selectedItems = null;\n\n if (hasSelectionChanged) {\n this._updateCount();\n }\n\n if (haveItemsChanged) {\n EventGroup.raise(this, SELECTION_ITEMS_CHANGE);\n\n if (this._onItemsChanged) {\n this._onItemsChanged();\n }\n }\n\n if (hasSelectionChanged) {\n this._change();\n }\n\n this.setChangeEvents(true);\n }\n\n public getItems(): TItem[] {\n return this._items;\n }\n\n public getSelection(): TItem[] {\n if (!this._selectedItems) {\n this._selectedItems = [];\n\n const items = this._items;\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (this.isIndexSelected(i)) {\n this._selectedItems.push(items[i]);\n }\n }\n }\n }\n\n return this._selectedItems;\n }\n\n public getSelectedCount(): number {\n return this._isAllSelected\n ? this._items.length - this._exemptedCount - this._unselectableCount\n : this._exemptedCount;\n }\n\n public getSelectedIndices(): number[] {\n if (!this._selectedIndices) {\n this._selectedIndices = [];\n\n const items = this._items;\n\n if (items) {\n for (let i = 0; i < items.length; i++) {\n if (this.isIndexSelected(i)) {\n this._selectedIndices.push(i);\n }\n }\n }\n }\n\n return this._selectedIndices;\n }\n\n public getItemIndex(key: string): number {\n const index = this._keyToIndexMap[key];\n\n return index ?? -1;\n }\n\n public isRangeSelected(fromIndex: number, count: number): boolean {\n if (count === 0) {\n return false;\n }\n\n const endIndex = fromIndex + count;\n\n for (let i = fromIndex; i < endIndex; i++) {\n if (!this.isIndexSelected(i)) {\n return false;\n }\n }\n\n return true;\n }\n\n public isAllSelected(): boolean {\n let selectableCount = this._items.length - this._unselectableCount;\n\n // In single mode, we can only have a max of 1 item.\n if (this.mode === SelectionMode.single) {\n selectableCount = Math.min(selectableCount, 1);\n }\n\n return (\n (this.count > 0 && this._isAllSelected && this._exemptedCount === 0) ||\n (!this._isAllSelected && this._exemptedCount === selectableCount && selectableCount > 0)\n );\n }\n\n public isKeySelected(key: string): boolean {\n const index = this._keyToIndexMap[key];\n\n return this.isIndexSelected(index);\n }\n\n public isIndexSelected(index: number): boolean {\n return !!(\n (this.count > 0 && this._isAllSelected && !this._exemptedIndices[index] && !this._unselectableIndices[index]) ||\n (!this._isAllSelected && this._exemptedIndices[index])\n );\n }\n\n public setAllSelected(isAllSelected: boolean): void {\n if (isAllSelected && this.mode !== SelectionMode.multiple) {\n return;\n }\n\n const selectableCount = this._items ? this._items.length - this._unselectableCount : 0;\n\n this.setChangeEvents(false);\n\n if (selectableCount > 0 && (this._exemptedCount > 0 || isAllSelected !== this._isAllSelected)) {\n this._exemptedIndices = {};\n\n if (isAllSelected !== this._isAllSelected || this._exemptedCount > 0) {\n this._exemptedCount = 0;\n this._isAllSelected = isAllSelected;\n this._change();\n }\n\n this._updateCount();\n }\n\n this.setChangeEvents(true);\n }\n\n public setKeySelected(key: string, isSelected: boolean, shouldAnchor: boolean): void {\n const index = this._keyToIndexMap[key];\n\n if (index >= 0) {\n this.setIndexSelected(index, isSelected, shouldAnchor);\n }\n }\n\n public setIndexSelected(index: number, isSelected: boolean, shouldAnchor: boolean): void {\n if (this.mode === SelectionMode.none) {\n return;\n }\n\n // Clamp the index.\n index = Math.min(Math.max(0, index), this._items.length - 1);\n\n // No-op on out of bounds selections.\n if (index < 0 || index >= this._items.length) {\n return;\n }\n\n this.setChangeEvents(false);\n\n const isExempt = this._exemptedIndices[index];\n const canSelect = !this._unselectableIndices[index];\n\n if (canSelect) {\n if (isSelected && this.mode === SelectionMode.single) {\n // If this is single-select, the previous selection should be removed.\n this._setAllSelected(false, true);\n }\n\n // Determine if we need to remove the exemption.\n if (isExempt && ((isSelected && this._isAllSelected) || (!isSelected && !this._isAllSelected))) {\n delete this._exemptedIndices[index];\n this._exemptedCount--;\n }\n\n // Determine if we need to add the exemption.\n if (!isExempt && ((isSelected && !this._isAllSelected) || (!isSelected && this._isAllSelected))) {\n this._exemptedIndices[index] = true;\n this._exemptedCount++;\n }\n\n if (shouldAnchor) {\n this._anchoredIndex = index;\n }\n }\n\n this._updateCount();\n\n this.setChangeEvents(true);\n }\n\n public setRangeSelected(fromIndex: number, count: number, isSelected: boolean, shouldAnchor: boolean): void {\n if (this.mode === SelectionMode.none) {\n return;\n }\n\n // Clamp the index.\n fromIndex = Math.min(Math.max(0, fromIndex), this._items.length - 1);\n\n // Clamp the range.\n count = Math.min(Math.max(0, count), this._items.length - fromIndex);\n\n // No-op on out of bounds selections.\n if (fromIndex < 0 || fromIndex >= this._items.length || count === 0) {\n return;\n }\n\n this.setChangeEvents(false);\n\n const anchorIndex = this._anchoredIndex || 0;\n let startIndex = fromIndex;\n const endIndex = fromIndex + count - 1;\n\n const newAnchorIndex = anchorIndex >= endIndex ? startIndex : endIndex;\n\n for (; startIndex <= endIndex; startIndex++) {\n this.setIndexSelected(startIndex, isSelected, shouldAnchor ? startIndex === newAnchorIndex : false);\n }\n\n this.setChangeEvents(true);\n }\n\n public selectToKey(key: string, clearSelection?: boolean): void {\n this.selectToIndex(this._keyToIndexMap[key], clearSelection);\n }\n\n public selectToRange(fromIndex: number, count: number, clearSelection?: boolean): void {\n if (this.mode === SelectionMode.none) {\n return;\n }\n\n if (this.mode === SelectionMode.single) {\n if (count === 1) {\n this.setIndexSelected(fromIndex, true, true);\n }\n return;\n }\n\n const anchorIndex = this._anchoredIndex || 0;\n let startIndex = Math.min(fromIndex, anchorIndex);\n const endIndex = Math.max(fromIndex + count - 1, anchorIndex);\n\n this.setChangeEvents(false);\n\n if (clearSelection) {\n this._setAllSelected(false, true);\n }\n\n for (; startIndex <= endIndex; startIndex++) {\n this.setIndexSelected(startIndex, true, false);\n }\n\n this.setChangeEvents(true);\n }\n\n public selectToIndex(index: number, clearSelection?: boolean): void {\n if (this.mode === SelectionMode.none) {\n return;\n }\n\n if (this.mode === SelectionMode.single) {\n this.setIndexSelected(index, true, true);\n return;\n }\n\n const anchorIndex = this._anchoredIndex || 0;\n let startIndex = Math.min(index, anchorIndex);\n const endIndex = Math.max(index, anchorIndex);\n\n this.setChangeEvents(false);\n\n if (clearSelection) {\n this._setAllSelected(false, true);\n }\n\n for (; startIndex <= endIndex; startIndex++) {\n this.setIndexSelected(startIndex, true, false);\n }\n\n this.setChangeEvents(true);\n }\n\n public toggleAllSelected(): void {\n this.setAllSelected(!this.isAllSelected());\n }\n\n public toggleKeySelected(key: string): void {\n this.setKeySelected(key, !this.isKeySelected(key), true);\n }\n\n public toggleIndexSelected(index: number): void {\n this.setIndexSelected(index, !this.isIndexSelected(index), true);\n }\n\n public toggleRangeSelected(fromIndex: number, count: number): void {\n if (this.mode === SelectionMode.none) {\n return;\n }\n\n const isRangeSelected = this.isRangeSelected(fromIndex, count);\n const endIndex = fromIndex + count;\n\n if (this.mode === SelectionMode.single && count > 1) {\n return;\n }\n\n this.setChangeEvents(false);\n for (let i = fromIndex; i < endIndex; i++) {\n this.setIndexSelected(i, !isRangeSelected, false);\n }\n this.setChangeEvents(true);\n }\n\n private _updateCount(preserveModalState: boolean = false): void {\n const count = this.getSelectedCount();\n\n if (count !== this.count) {\n this.count = count;\n this._change();\n }\n\n if (!this.count && !preserveModalState) {\n this.setModal(false);\n }\n }\n\n private _setAllSelected(isAllSelected: boolean, preserveModalState: boolean = false): void {\n if (isAllSelected && this.mode !== SelectionMode.multiple) {\n return;\n }\n\n const selectableCount = this._items ? this._items.length - this._unselectableCount : 0;\n\n this.setChangeEvents(false);\n\n if (selectableCount > 0 && (this._exemptedCount > 0 || isAllSelected !== this._isAllSelected)) {\n this._exemptedIndices = {};\n\n if (isAllSelected !== this._isAllSelected || this._exemptedCount > 0) {\n this._exemptedCount = 0;\n this._isAllSelected = isAllSelected;\n this._change();\n }\n\n this._updateCount(preserveModalState);\n }\n\n this.setChangeEvents(true);\n }\n\n private _change(): void {\n if (this._changeEventSuppressionCount === 0) {\n this._selectedItems = null;\n this._selectedIndices = undefined;\n\n EventGroup.raise(this, SELECTION_CHANGE);\n\n if (this._onSelectionChanged) {\n this._onSelectionChanged();\n }\n } else {\n this._hasChanged = true;\n }\n }\n}\n\nfunction defaultGetKey<TItem = IObjectWithKey>(item: TItem, index?: number): string | number {\n // 0 may be used as a key\n const { key = `${index}` } = (item || {}) as IObjectWithKey;\n return key;\n}\n"]} |