vscroll
Version:
Virtual scroll engine
49 lines • 1.99 kB
JavaScript
import { Direction } from '../../inputs/index';
export class CheckBufferCall {
constructor(context, logger) {
this.context = context;
this.logger = logger;
}
fillEmpty(items, before, after) {
if (!items.length) {
this.logger.log('no items to fill the buffer; empty list');
return false;
}
if (!Number.isInteger(before) && !Number.isInteger(after)) {
this.logger.log('no items to fill the buffer; wrong indexes');
return false;
}
this.logger.log(() => `going to fill the buffer with ${items.length} item(s)`);
return true;
}
insertInBuffer(predicate, before, after) {
const index = Number.isInteger(before) ? before : (Number.isInteger(after) ? after : NaN);
const found = this.context.items.find(item => (predicate && predicate(item.get())) ||
(Number.isInteger(index) && index === item.$index));
if (!found) {
this.logger.log('no items to insert in buffer; empty predicate\'s result');
return NaN;
}
return found.$index;
}
insertVirtual(items, index, direction) {
if (!items.length) {
this.logger.log('no items to insert virtually; empty list');
return false;
}
const { firstIndex, lastIndex, finiteAbsMinIndex, finiteAbsMaxIndex } = this.context;
if (index < finiteAbsMinIndex || index > finiteAbsMaxIndex) {
this.logger.log(() => 'no items to insert virtually; ' +
`selected index (${index}) does not match virtual area [${finiteAbsMinIndex}..${finiteAbsMaxIndex}]`);
return false;
}
const before = direction === Direction.backward;
if (!(index < firstIndex + (before ? 1 : 0) || index > lastIndex - (before ? 0 : 1))) {
this.logger.log(() => `no items to insert virtually; selected index (${index}) belongs Buffer [${firstIndex}..${lastIndex}]`);
return false;
}
this.logger.log(() => `going to insert ${items.length} item(s) virtually`);
return true;
}
}
//# sourceMappingURL=checkCall.js.map