@revolist/revogrid
Version:
Virtual reactive data grid spreadsheet component - RevoGrid.
62 lines (61 loc) • 2.07 kB
JavaScript
/*!
* Built by Revolist OU ❤️
*/
/**
* Plugin for trimming
*
* 1.a. Retrieves the previous sizes value. Saves the resulting trimmed data as a new sizes value.
* 1.b. Stores a reference to the trimmed data to prevent further changes.
* 2. Removes multiple and shifts the data based on the trimmed value.
*/
export const trimmedPlugin = (storeService) => {
let trimmingObject = null;
let trimmedPreviousSizes = null;
return {
set(key, val) {
switch (key) {
case 'sizes': {
// prevent changes after trimming
if (trimmingObject && trimmingObject === val) {
trimmingObject = null;
return;
}
trimmedPreviousSizes = null;
break;
}
case 'trimmed': {
const trim = val;
if (!trimmedPreviousSizes) {
trimmedPreviousSizes = storeService.store.get('sizes');
}
trimmingObject = removeMultipleAndShift(trimmedPreviousSizes, trim || {});
// save a reference to the trimmed object to prevent changes after trimming
storeService.setSizes(trimmingObject);
break;
}
}
},
};
};
function removeMultipleAndShift(items, toRemove) {
const newItems = {};
const sortedIndexes = Object.keys(items || {})
.map(Number)
.sort((a, b) => a - b);
const lastIndex = sortedIndexes[sortedIndexes.length - 1];
let shift = 0;
for (let i = 0; i <= lastIndex; i++) {
if (toRemove[i] !== undefined) {
shift++;
// skip already removed
if (items[i] !== undefined) {
continue;
}
}
if (items[i] !== undefined) {
newItems[i - shift] = items[i];
}
}
return newItems;
}
//# sourceMappingURL=dimension.trim.plugin.js.map