aboutsummaryrefslogtreecommitdiff
path: root/src/settings/actions/setting.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings/actions/setting.ts')
-rw-r--r--src/settings/actions/setting.ts63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/settings/actions/setting.ts b/src/settings/actions/setting.ts
new file mode 100644
index 0000000..db63a45
--- /dev/null
+++ b/src/settings/actions/setting.ts
@@ -0,0 +1,63 @@
+import actions from 'settings/actions';
+import * as validator from 'shared/settings/validator';
+import * as settingsValues from 'shared/settings/values';
+import * as settingsStorage from 'shared/settings/storage';
+import keymaps from '../keymaps';
+
+const load = async() => {
+ let settings = await settingsStorage.loadRaw();
+ return set(settings);
+};
+
+const save = async(settings) => {
+ try {
+ if (settings.source === 'json') {
+ let value = JSON.parse(settings.json);
+ validator.validate(value);
+ }
+ } catch (e) {
+ return {
+ type: actions.SETTING_SHOW_ERROR,
+ error: e.toString(),
+ json: settings.json,
+ };
+ }
+ await settingsStorage.save(settings);
+ return set(settings);
+};
+
+const switchToForm = (json) => {
+ try {
+ validator.validate(JSON.parse(json));
+ let form = settingsValues.formFromJson(json, keymaps.allowedOps);
+ return {
+ type: actions.SETTING_SWITCH_TO_FORM,
+ form,
+ };
+ } catch (e) {
+ return {
+ type: actions.SETTING_SHOW_ERROR,
+ error: e.toString(),
+ json,
+ };
+ }
+};
+
+const switchToJson = (form) => {
+ let json = settingsValues.jsonFromForm(form);
+ return {
+ type: actions.SETTING_SWITCH_TO_JSON,
+ json,
+ };
+};
+
+const set = (settings) => {
+ return {
+ type: actions.SETTING_SET_SETTINGS,
+ source: settings.source,
+ json: settings.json,
+ form: settings.form,
+ };
+};
+
+export { load, save, set, switchToForm, switchToJson };