UNPKG

vscroll

Version:
116 lines 4.8 kB
import { __extends, __read, __spreadArray } from "tslib"; import Update from './update'; import { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index'; import { Direction } from '../../inputs/index'; var Remove = /** @class */ (function (_super) { __extends(Remove, _super); function Remove() { return _super !== null && _super.apply(this, arguments) || this; } Remove.run = function (scroller, options) { var params = Remove.parseInput(scroller, options).params; if (!params) { return; } var shouldRemove = Remove.doRemove(scroller, params); scroller.workflow.call({ process: Remove.process, status: shouldRemove ? ProcessStatus.next : ProcessStatus.done }); }; Remove.doRemove = function (scroller, params) { var fetch = scroller.state.fetch; fetch.firstVisible.index = NaN; var removed = Remove.removeBufferedItems(scroller, params); var shouldBuffered = removed.length > 0; if (shouldBuffered) { // exclude just removed in-buffer indexes if (params.indexes && params.indexes.length) { params.indexes = params.indexes.filter(function (i) { return !removed.includes(i); }); } // shift virtual indexes that remain if (params.indexes && params.indexes.length) { var diffLeft_1 = (params.increase ? 1 : 0) * removed.length; var diffRight_1 = (params.increase ? 0 : -1) * removed.length; params.indexes = params.indexes.map(function (index) { return index + (index < removed[0] ? diffLeft_1 : diffRight_1); }); } } var shouldVirtual = Remove.removeVirtualItems(scroller, params); if (!shouldBuffered && !shouldVirtual) { return false; } scroller.logger.stat('after remove'); return true; }; Remove.removeBufferedItems = function (scroller, options) { var predicate = options.predicate, indexes = options.indexes, increase = options.increase; if (!predicate && !indexes) { return []; } var newPredicate = function (item) { return (predicate && predicate(item)) || (!!indexes && indexes.includes(item.$index)); }; var indexesToRemove = scroller.buffer.items.reduce(function (acc, item) { return newPredicate(item) ? __spreadArray(__spreadArray([], __read(acc), false), [item.$index], false) : acc; }, []); var updateOptions = { predicate: function (item) { return !newPredicate(item); }, fixRight: increase }; Update.doUpdate(scroller, updateOptions); return indexesToRemove; }; Remove.removeVirtualItems = function (scroller, params) { var indexes = params.indexes, increase = params.increase; if (!indexes || !indexes.length) { return false; } var buffer = scroller.buffer, viewport = scroller.viewport, fetch = scroller.state.fetch; // get items to remove var finiteAbsMinIndex = buffer.finiteAbsMinIndex, firstIndex = buffer.firstIndex, finiteAbsMaxIndex = buffer.finiteAbsMaxIndex, lastIndex = buffer.lastIndex; var toRemove = []; for (var i = 0, len = indexes.length; i < len; i++) { var index = indexes[i]; if (index >= finiteAbsMinIndex && !isNaN(firstIndex) && index < firstIndex) { toRemove.push(index); // backward; } else if (index <= finiteAbsMaxIndex && !isNaN(lastIndex) && index > lastIndex) { toRemove.push(index); // forward; } else { continue; } } if (!toRemove.length) { return false; } // what should be shown after remove; Buffer removal has priority if (isNaN(fetch.firstVisible.index)) { var _a = viewport.getEdgeVisibleItem(buffer.items, Direction.backward), index = _a.index, diff = _a.diff; fetch.firstVisible.index = index; if (!isNaN(index)) { fetch.firstVisible.delta = -buffer.getSizeByIndex(index) + diff; } } // virtual removal scroller.logger.log(function () { return "going to remove ".concat(toRemove.length, " item(s) virtually"); }); buffer.removeVirtually(toRemove, !!increase); buffer.checkDefaultSize(); Remove.shiftFirstVisibleIndex(scroller, toRemove, !!increase); return true; }; Remove.shiftFirstVisibleIndex = function (scroller, listToRemove, increase) { var firstVisible = scroller.state.fetch.firstVisible; if (isNaN(firstVisible.index)) { return; } var shift = listToRemove.reduce(function (acc, index) { return acc + (((increase && index > firstVisible.index) || (!increase && index < firstVisible.index)) ? 1 : 0); }, 0); firstVisible.index = firstVisible.index + (increase ? shift : -shift); }; return Remove; }(BaseAdapterProcessFactory(AdapterProcess.remove))); export default Remove; //# sourceMappingURL=remove.js.map