@quantlab/handsontable
Version:
Spreadsheet-like data grid editor that provides copy/paste functionality compatible with Excel/Google Docs
65 lines (55 loc) • 1.48 kB
JavaScript
import arrayMapper from './../../mixins/arrayMapper';
import {arrayFilter} from './../../helpers/array';
import {mixin} from './../../helpers/object';
import {rangeEach} from './../../helpers/number';
/**
* @class ColumnsMapper
* @plugin ManualColumnMove
*/
class ColumnsMapper {
constructor(manualColumnMove) {
/**
* Instance of ManualColumnMove plugin.
*
* @type {ManualColumnMove}
*/
this.manualColumnMove = manualColumnMove;
}
/**
* Reset current map array and create new one.
*
* @param {Number} [length] Custom generated map length.
*/
createMap(length) {
let originLength = length === void 0 ? this._arrayMap.length : length;
this._arrayMap.length = 0;
rangeEach(originLength - 1, (itemIndex) => {
this._arrayMap[itemIndex] = itemIndex;
});
}
/**
* Destroy class.
*/
destroy() {
this._arrayMap = null;
}
/**
* Moving elements in columnsMapper.
*
* @param {Number} from Column index to move.
* @param {Number} to Target index.
*/
moveColumn(from, to) {
let indexToMove = this._arrayMap[from];
this._arrayMap[from] = null;
this._arrayMap.splice(to, 0, indexToMove);
}
/**
* Clearing arrayMap from `null` entries.
*/
clearNull() {
this._arrayMap = arrayFilter(this._arrayMap, (i) => i !== null);
}
}
mixin(ColumnsMapper, arrayMapper);
export default ColumnsMapper;