UNPKG

vscroll

Version:
82 lines 3.51 kB
import { __extends, __read, __spreadArray } from "tslib"; import Update from './update'; import { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index'; import { Item } from '../../classes/item'; import { Direction } from '../../inputs/index'; var Insert = /** @class */ (function (_super) { __extends(Insert, _super); function Insert() { return _super !== null && _super.apply(this, arguments) || this; } Insert.run = function (scroller, options) { var params = Insert.parseInput(scroller, options).params; if (!params) { return; } var shouldInsert = Insert.doInsert(scroller, params); scroller.workflow.call({ process: Insert.process, status: shouldInsert ? ProcessStatus.next : ProcessStatus.done }); }; Insert.doInsert = function (scroller, params) { if (!Insert.insertEmpty(scroller, params)) { if (!Insert.insertInBuffer(scroller, params)) { if (!Insert.insertVirtually(scroller, params)) { return false; } } } return true; }; Insert.insertEmpty = function (scroller, params) { var buffer = scroller.buffer, routines = scroller.routines, fetch = scroller.state.fetch; if (buffer.size) { return false; } var beforeIndex = params.beforeIndex, afterIndex = params.afterIndex, items = params.items, decrease = params.decrease; if (!buffer.fillEmpty(items, beforeIndex, afterIndex, !!decrease, function (index, data) { return new Item(index, data, routines); })) { return false; } fetch.fill(buffer.items, buffer.startIndex); return true; }; Insert.insertInBuffer = function (scroller, params) { var before = params.before, after = params.after, beforeIndex = params.beforeIndex, afterIndex = params.afterIndex, items = params.items, decrease = params.decrease; var indexToInsert = scroller.buffer.getIndexToInsert(before || after, beforeIndex, afterIndex); if (params.virtualize || isNaN(indexToInsert)) { return false; } var isBackward = Number.isInteger(beforeIndex) || before; var updateOptions = { predicate: function (_a) { var $index = _a.$index, data = _a.data; if (indexToInsert === $index) { return isBackward ? __spreadArray(__spreadArray([], __read(items), false), [data], false) : __spreadArray([data], __read(items), false); } return true; }, fixRight: decrease }; return Update.doUpdate(scroller, updateOptions); }; Insert.insertVirtually = function (scroller, params) { var beforeIndex = params.beforeIndex, afterIndex = params.afterIndex, items = params.items, decrease = params.decrease; var buffer = scroller.buffer, fetch = scroller.state.fetch, viewport = scroller.viewport; var direction = Number.isInteger(beforeIndex) ? Direction.backward : Direction.forward; var indexToInsert = (direction === Direction.backward ? beforeIndex : afterIndex); if (!buffer.insertVirtually(items, indexToInsert, direction, !!decrease)) { return false; } var _a = viewport.getEdgeVisibleItem(buffer.items, Direction.backward), index = _a.index, diff = _a.diff; fetch.firstVisible.index = index; if (!isNaN(index)) { fetch.simulate = true; fetch.firstVisible.delta = -buffer.getSizeByIndex(index) + diff; } return true; }; return Insert; }(BaseAdapterProcessFactory(AdapterProcess.insert))); export default Insert; //# sourceMappingURL=insert.js.map