in src/table/selection.ts [66:97]
cloneWith({data, selected, focused}: CloneWithConfig<T>) {
const newData = data || this._rawData;
let newSelected;
if (data && !selected) {
newSelected = new Set(
[...this._buildData(newData)].filter(item =>
[...this._selected].some(it => this._getKey(item) === this._getKey(it)),
),
);
newSelected = this._buildSelected(this._buildData(newData), newSelected);
} else if (selected) {
newSelected = selected;
} else {
newSelected = this._selected;
}
newSelected = new Set([...newSelected].filter(item => this._isItemSelectable(item)));
const cloneFocus = () =>
[...this._buildData(data)].filter(item => this._focused && this._getKey(item) === this._getKey(this._focused))[0];
const newFocused = focused === undefined ? this._focused : focused;
return new (this.constructor as typeof Selection)({
data: newData,
selected: newSelected,
focused: data && !focused ? cloneFocus() : newFocused,
getKey: this._getKey,
getChildren: this._getChildren,
isItemSelectable: this._isItemSelectable,
});
}