@revolist/revogrid
Version:
Virtual reactive data grid spreadsheet component - RevoGrid.
86 lines (85 loc) • 2.44 kB
JavaScript
/*!
* Built by Revolist OU ❤️
*/
/**
* Selection store
*/
import { setStore } from "../../utils";
import { getRange } from "../index";
import { createStore } from "@stencil/store";
function defaultState() {
return {
range: null,
tempRange: null,
tempRangeType: null,
focus: null,
edit: null,
lastCell: null,
nextFocus: null,
};
}
export class SelectionStore {
constructor() {
this.unsubscribe = [];
this.store = createStore(defaultState());
this.store.on('set', (key, newVal) => {
if (key === 'tempRange' && !newVal) {
this.store.set('tempRangeType', null);
}
});
}
onChange(propName, cb) {
this.unsubscribe.push(this.store.onChange(propName, cb));
}
clearFocus() {
setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });
}
setFocus(focus, end) {
if (!end) {
setStore(this.store, { focus });
}
else {
setStore(this.store, {
focus,
range: getRange(focus, end),
edit: null,
tempRange: null,
});
}
}
setNextFocus(focus) {
setStore(this.store, { nextFocus: focus });
}
setTempArea(range) {
setStore(this.store, { tempRange: range === null || range === void 0 ? void 0 : range.area, tempRangeType: range === null || range === void 0 ? void 0 : range.type, edit: null });
}
clearTemp() {
setStore(this.store, { tempRange: null });
}
/** Can be applied from selection change or from simple keyboard change clicks */
setRangeArea(range) {
setStore(this.store, { range, edit: null, tempRange: null });
}
setRange(start, end) {
const range = getRange(start, end);
this.setRangeArea(range);
}
setLastCell(lastCell) {
setStore(this.store, { lastCell });
}
setEdit(val) {
const focus = this.store.get('focus');
if (focus && typeof val === 'string') {
setStore(this.store, {
edit: { x: focus.x, y: focus.y, val },
});
return;
}
setStore(this.store, { edit: null });
}
dispose() {
this.unsubscribe.forEach(f => f());
this.store.dispose();
}
}
//# sourceMappingURL=selection.store.js.map