A fork of https://github.com/ueokande/vim-vixen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
import * as actions from './index'; |
|
import * as storages from '../storage'; |
|
import SettingData, { |
|
JSONTextSettings, FormSettings, SettingSource, |
|
} from '../../shared/SettingData'; |
|
|
|
const load = async(): Promise<actions.SettingAction> => { |
|
let data = await storages.load(); |
|
return set(data); |
|
}; |
|
|
|
const save = async(data: SettingData): Promise<actions.SettingAction> => { |
|
try { |
|
if (data.getSource() === SettingSource.JSON) { |
|
// toSettings exercise validation |
|
data.toSettings(); |
|
} |
|
} catch (e) { |
|
return { |
|
type: actions.SETTING_SHOW_ERROR, |
|
error: e.toString(), |
|
json: data.getJSON(), |
|
}; |
|
} |
|
await storages.save(data); |
|
return set(data); |
|
}; |
|
|
|
const switchToForm = (json: JSONTextSettings): actions.SettingAction => { |
|
try { |
|
// toSettings exercise validation |
|
let form = FormSettings.fromSettings(json.toSettings()); |
|
return { |
|
type: actions.SETTING_SWITCH_TO_FORM, |
|
form, |
|
}; |
|
} catch (e) { |
|
return { |
|
type: actions.SETTING_SHOW_ERROR, |
|
error: e.toString(), |
|
json, |
|
}; |
|
} |
|
}; |
|
|
|
const switchToJson = (form: FormSettings): actions.SettingAction => { |
|
let json = JSONTextSettings.fromSettings(form.toSettings()); |
|
return { |
|
type: actions.SETTING_SWITCH_TO_JSON, |
|
json, |
|
}; |
|
}; |
|
|
|
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 };
|
|
|