vscroll
Version:
Virtual scroll engine
40 lines • 1.24 kB
JavaScript
import Update from './update';
import { BaseAdapterProcessFactory, AdapterProcess, ProcessStatus } from '../misc/index';
export default class Replace extends BaseAdapterProcessFactory(AdapterProcess.replace) {
static run(scroller, options) {
const { params } = Replace.parseInput(scroller, options);
if (!params) {
return;
}
const shouldReplace = Replace.doReplace(scroller, params);
scroller.workflow.call({
process: Replace.process,
status: shouldReplace ? ProcessStatus.next : ProcessStatus.done,
});
}
static doReplace(scroller, params) {
const toRemove = scroller.buffer.items
.filter(item => params.predicate(item))
.map(item => item.$index);
if (!toRemove.length) {
scroller.logger.log('no items to be replaced');
return false;
}
let injected = false;
const updateOptions = {
predicate: ({ $index }) => {
if (!toRemove.includes($index)) {
return true;
}
if (!injected) {
injected = true;
return params.items;
}
return false;
},
fixRight: params.fixRight
};
return Update.doUpdate(scroller, updateOptions);
}
}
//# sourceMappingURL=replace.js.map