aboutsummaryrefslogtreecommitdiff
path: root/src/settings/actions
diff options
context:
space:
mode:
authorShin'ya Ueoka <ueokande@i-beam.org>2019-05-05 08:03:29 +0900
committerShin'ya Ueoka <ueokande@i-beam.org>2019-05-06 22:17:18 +0900
commita0882bbceb7ed71d56bf8557620449fbc3f19749 (patch)
treef2087d44f21dd68fc3584f62cfb9b62ae58bab2b /src/settings/actions
parentd01db82c0dca352de2d7644c383d388fc3ec0366 (diff)
Declare setting types
Diffstat (limited to 'src/settings/actions')
-rw-r--r--src/settings/actions/index.ts16
-rw-r--r--src/settings/actions/setting.ts60
2 files changed, 45 insertions, 31 deletions
diff --git a/src/settings/actions/index.ts b/src/settings/actions/index.ts
index 75c6bb5..b1e996e 100644
--- a/src/settings/actions/index.ts
+++ b/src/settings/actions/index.ts
@@ -1,3 +1,7 @@
+import {
+ JSONSettings, FormSettings, SettingSource,
+} from '../../shared/SettingData';
+
// Settings
export const SETTING_SET_SETTINGS = 'setting.set.settings';
export const SETTING_SHOW_ERROR = 'setting.show.error';
@@ -6,25 +10,25 @@ export const SETTING_SWITCH_TO_JSON = 'setting.switch.to.json';
interface SettingSetSettingsAcion {
type: typeof SETTING_SET_SETTINGS;
- source: string;
- json: string;
- form: any;
+ source: SettingSource;
+ json?: JSONSettings;
+ form?: FormSettings;
}
interface SettingShowErrorAction {
type: typeof SETTING_SHOW_ERROR;
error: string;
- json: string;
+ json: JSONSettings;
}
interface SettingSwitchToFormAction {
type: typeof SETTING_SWITCH_TO_FORM;
- form: any;
+ form: FormSettings,
}
interface SettingSwitchToJsonAction {
type: typeof SETTING_SWITCH_TO_JSON;
- json: string;
+ json: JSONSettings,
}
export type SettingAction =
diff --git a/src/settings/actions/setting.ts b/src/settings/actions/setting.ts
index b03cd80..9eb416e 100644
--- a/src/settings/actions/setting.ts
+++ b/src/settings/actions/setting.ts
@@ -1,35 +1,35 @@
import * as actions from './index';
-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';
+import * as storages from '../storage';
+import SettingData, {
+ JSONSettings, FormSettings, SettingSource,
+} from '../../shared/SettingData';
const load = async(): Promise<actions.SettingAction> => {
- let settings = await settingsStorage.loadRaw();
- return set(settings);
+ let data = await storages.load();
+ return set(data);
};
-const save = async(settings: any): Promise<actions.SettingAction> => {
+const save = async(data: SettingData): Promise<actions.SettingAction> => {
try {
- if (settings.source === 'json') {
- let value = JSON.parse(settings.json);
- validator.validate(value);
+ if (data.getSource() === SettingSource.JSON) {
+ // toSettings exercise validation
+ data.toSettings();
}
} catch (e) {
return {
type: actions.SETTING_SHOW_ERROR,
error: e.toString(),
- json: settings.json,
+ json: data.getJSON(),
};
}
- await settingsStorage.save(settings);
- return set(settings);
+ await storages.save(data);
+ return set(data);
};
-const switchToForm = (json: string): actions.SettingAction => {
+const switchToForm = (json: JSONSettings): actions.SettingAction => {
try {
- validator.validate(JSON.parse(json));
- let form = settingsValues.formFromJson(json, keymaps.allowedOps);
+ // toSettings exercise validation
+ let form = FormSettings.fromSettings(json.toSettings());
return {
type: actions.SETTING_SWITCH_TO_FORM,
form,
@@ -43,21 +43,31 @@ const switchToForm = (json: string): actions.SettingAction => {
}
};
-const switchToJson = (form: any): actions.SettingAction => {
- let json = settingsValues.jsonFromForm(form);
+const switchToJson = (form: FormSettings): actions.SettingAction => {
+ let json = JSONSettings.fromSettings(form.toSettings());
return {
type: actions.SETTING_SWITCH_TO_JSON,
json,
};
};
-const set = (settings: any): actions.SettingAction => {
- return {
- type: actions.SETTING_SET_SETTINGS,
- source: settings.source,
- json: settings.json,
- form: settings.form,
- };
+const set = (data: SettingData): actions.SettingAction => {
+ let source = data.getSource();
+ switch (source) {
+ case SettingSource.JSON:
+ return {
+ type: actions.SETTING_SET_SETTINGS,
+ source: source,
+ json: data.getJSON(),
+ };
+ case SettingSource.Form:
+ return {
+ type: actions.SETTING_SET_SETTINGS,
+ source: source,
+ form: data.getForm(),
+ };
+ }
+ throw new Error(`unknown source: ${source}`);
};
export { load, save, set, switchToForm, switchToJson };