cloneWith()

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,
    });
  }