aboutsummaryrefslogtreecommitdiff
path: root/src/settings/actions
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings/actions')
-rw-r--r--src/settings/actions/index.js3
-rw-r--r--src/settings/actions/setting.js51
2 files changed, 44 insertions, 10 deletions
diff --git a/src/settings/actions/index.js b/src/settings/actions/index.js
index 8c212c2..016f2a5 100644
--- a/src/settings/actions/index.js
+++ b/src/settings/actions/index.js
@@ -1,4 +1,7 @@
export default {
// Settings
SETTING_SET_SETTINGS: 'setting.set.settings',
+ SETTING_SHOW_ERROR: 'setting.show.error',
+ SETTING_SWITCH_TO_FORM: 'setting.switch.to.form',
+ SETTING_SWITCH_TO_JSON: 'setting.switch.to.json',
};
diff --git a/src/settings/actions/setting.js b/src/settings/actions/setting.js
index 1219ba5..3bb24be 100644
--- a/src/settings/actions/setting.js
+++ b/src/settings/actions/setting.js
@@ -1,8 +1,9 @@
import actions from 'settings/actions';
import messages from 'shared/messages';
-import DefaultSettings from 'shared/settings/default';
-import * as settingsStorage from 'shared/settings/storage';
+import * as validator from 'shared/settings/validator';
+import KeymapsForm from '../components/form/keymaps-form';
import * as settingsValues from 'shared/settings/values';
+import * as settingsStorage from 'shared/settings/storage';
const load = async() => {
let settings = await settingsStorage.loadRaw();
@@ -10,6 +11,18 @@ const load = async() => {
};
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);
await browser.runtime.sendMessage({
type: messages.SETTINGS_RELOAD
@@ -17,21 +30,39 @@ const save = async(settings) => {
return set(settings);
};
-const set = (settings) => {
- let value = JSON.parse(DefaultSettings.json);
- if (settings.source === 'json') {
- value = settingsValues.valueFromJson(settings.json);
- } else if (settings.source === 'form') {
- value = settingsValues.valueFromForm(settings.form);
+const switchToForm = (json) => {
+ try {
+ validator.validate(JSON.parse(json));
+ // AllowdOps filters operations, this is dirty dependency
+ let form = settingsValues.formFromJson(json, KeymapsForm.AllowdOps);
+ 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,
- value,
};
};
-export { load, save };
+export { load, save, switchToForm, switchToJson };