/
UserRulesEditorStore.js
121 lines (96 loc) · 3.01 KB
/
UserRulesEditorStore.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import { createContext } from 'react';
import {
action,
computed,
observable,
runInAction,
makeObservable,
} from 'mobx';
import { messenger } from '../../../services/messenger';
import { createSavingService, EVENTS as SAVING_FSM_EVENTS, STATES } from '../Editor/savingFSM';
const savingService = createSavingService({
id: 'userRules',
services: {
saveData: (_, e) => messenger.saveUserRules(e.value),
},
});
class UserRulesEditorStore {
@observable settings = null;
@observable userRulesEditorContentChanged = false;
@observable userRulesEditorWrap = null;
@observable savingUserRulesState = savingService.initialState.value;
@observable userRulesExportAvailable = false;
@observable userRulesEditorPrefsDropped = false;
constructor() {
makeObservable(this);
savingService.onTransition((state) => {
runInAction(() => {
this.savingUserRulesState = state.value;
if (state.value === STATES.SAVING) {
this.userRulesEditorContentChanged = false;
}
});
});
}
@action
async requestSettingsData() {
const data = await messenger.getOptionsData();
runInAction(() => {
this.settings = data.settings;
});
}
@action
setUserRulesEditorContentChangedState = (state) => {
this.userRulesEditorContentChanged = state;
};
@action
setUserRulesExportAvailableState = (state) => {
this.userRulesExportAvailable = state;
};
@action
setUserRulesEditorPrefsDropped = (state) => {
this.userRulesEditorPrefsDropped = state;
};
@action
updateSetting(settingId, value) {
if (this.settings) {
this.settings.values[settingId] = value;
}
messenger.changeUserSetting(settingId, value);
}
@action
async toggleUserRulesEditorWrapMode() {
this.userRulesEditorWrap = !this.userRulesEditorWrap;
if (this.settings) {
await this.updateSetting(
this.settings.names.USER_RULES_EDITOR_WRAP, this.userRulesEditorWrap,
);
}
}
@action
setUserRulesEditorWrapMode(value) {
this.userRulesEditorWrap = value;
}
@computed
get userRulesEditorWrapState() {
if (this.settings) {
this.setUserRulesEditorWrapMode(
this.settings.values[this.settings.names.USER_RULES_EDITOR_WRAP],
);
}
return this.userRulesEditorWrap;
}
@computed
get userFilterEnabledSettingId() {
return this.settings.names.USER_FILTER_ENABLED;
}
@computed
get userFilterEnabled() {
return this.settings.values[this.userFilterEnabledSettingId];
}
// eslint-disable-next-line class-methods-use-this
async saveUserRules(value) {
savingService.send(SAVING_FSM_EVENTS.SAVE, { value });
}
}
export const userRulesEditorStore = createContext(new UserRulesEditorStore());