web-apps/apps/spreadsheeteditor/mobile/src/store/sheets.js
2021-10-22 19:52:59 +04:00

122 lines
2.6 KiB
JavaScript

import {observable, action, makeObservable, computed} from 'mobx';
class Worksheet {
sheet = {
index : -1,
active : false,
name : '',
locked : false,
hidden : false,
color : ''
};
constructor(data = {}) {
makeObservable(this, {
sheet: observable
});
this.sheet.merge(data);
}
}
export class storeWorksheets {
sheets;
constructor() {
makeObservable(this, {
sheets: observable,
resetSheets: action,
setActiveWorksheet: action,
activeWorksheet: computed,
isWorkbookLocked: observable,
setWorkbookLocked: action,
isWorksheetLocked: observable,
setWorksheetLocked: action,
isProtectedWorkbook: observable,
setProtectedWorkbook: action,
wsProps: observable,
setWsProps: action,
isDisabledEditSheet: observable,
setDisabledEditSheet: action
});
this.sheets = [];
}
resetSheets(sheets) {
this.sheets = Object.values(sheets)
}
setActiveWorksheet(i) {
if ( !this.sheets[i].active ) {
this.sheets.forEach(model => {
if ( model.active )
model.active = false;
});
this.sheets[i].active = true;
}
}
get activeWorksheet() {
for (let i = 0; i < this.sheets.length; i++) {
if (this.sheets[i].active)
return i;
}
return -1;
}
at(i) {
return this.sheets[i]
}
hasHiddenWorksheet() {
return this.sheets.some(model => model.hidden);
}
hiddenWorksheets() {
return this.sheets.filter(model => model.hidden);
}
visibleWorksheets() {
return this.sheets.filter(model => !model.hidden);
}
isWorkbookLocked = false;
setWorkbookLocked(locked) {
this.isWorkbookLocked = locked;
}
isWorksheetLocked = false;
setWorksheetLocked(index, locked) {
let model = this.sheets[index];
if(model && model.locked !== locked)
model.locked = locked;
this.isWorksheetLocked = locked;
}
isProtectedWorkbook = false;
setProtectedWorkbook(value) {
this.isProtectedWorkbook = value;
}
wsProps;
setWsProps(value) {
this.wsProps = value;
}
wsLock;
setWsLock(value) {
this.wsLock = value;
}
isDisabledEditSheet;
setDisabledEditSheet(value) {
this.isDisabledEditSheet = value;
}
}