UNPKG

@revolist/revogrid

Version:

Virtual reactive data grid spreadsheet component - RevoGrid.

86 lines (85 loc) 2.44 kB
/*! * 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