separate setting actions and reducers

jh-changes
Shin'ya Ueoka 7 years ago
parent d23c190cad
commit 6083e70ea0
  1. 4
      src/background/actions/index.js
  2. 13
      src/background/actions/setting.js
  3. 4
      src/background/components/background.js
  4. 4
      src/background/index.js
  5. 2
      src/background/reducers/index.js
  6. 17
      src/background/reducers/setting.js
  7. 18
      src/settings/actions/setting.js
  8. 31
      src/shared/settings/storage.js
  9. 19
      test/background/reducers/setting.test.js

@ -0,0 +1,4 @@
export default {
// Settings
SETTING_SET_SETTINGS: 'setting.set.settings',
};

@ -0,0 +1,13 @@
import actions from '../actions';
import * as settingsStorage from 'shared/settings/storage';
const load = () => {
return settingsStorage.loadValue().then((value) => {
return {
type: actions.SETTING_SET_SETTINGS,
value,
};
});
};
export { load };

@ -1,6 +1,6 @@
import messages from 'shared/messages';
import * as operationActions from 'background/actions/operation';
import * as settingsActions from 'settings/actions/setting';
import * as settingActions from 'background/actions/setting';
import * as tabActions from 'background/actions/tab';
import * as commands from 'shared/commands';
@ -46,7 +46,7 @@ export default class BackgroundComponent {
case messages.CONSOLE_QUERY_COMPLETIONS:
return commands.complete(message.text, settings.value);
case messages.SETTINGS_RELOAD:
this.store.dispatch(settingsActions.load());
this.store.dispatch(settingActions.load());
return this.broadcastSettingsChanged();
}
}

@ -1,4 +1,4 @@
import * as settingsActions from 'settings/actions/setting';
import * as settingActions from 'background/actions/setting';
import messages from 'shared/messages';
import BackgroundComponent from 'background/components/background';
import reducers from 'background/reducers';
@ -16,4 +16,4 @@ const store = createStore(reducers, (e, sender) => {
// eslint-disable-next-line no-unused-vars
const backgroundComponent = new BackgroundComponent(store);
store.dispatch(settingsActions.load());
store.dispatch(settingActions.load());

@ -1,4 +1,4 @@
import settingReducer from 'settings/reducers/setting';
import settingReducer from './setting';
// Make setting reducer instead of re-use
const defaultState = {

@ -0,0 +1,17 @@
import actions from 'settings/actions';
const defaultState = {
value: {},
};
export default function reducer(state = defaultState, action = {}) {
switch (action.type) {
case actions.SETTING_SET_SETTINGS:
return {
value: action.value,
};
default:
return state;
}
}

@ -1,26 +1,22 @@
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 settingsValues from 'shared/settings/values';
const load = () => {
return browser.storage.local.get('settings').then(({ settings }) => {
if (!settings) {
return set(DefaultSettings);
}
return set(Object.assign({}, DefaultSettings, settings));
}, console.error);
return settingsStorage.loadRaw().then((settings) => {
return set(settings);
});
};
const save = (settings) => {
return browser.storage.local.set({
settings,
}).then(() => {
return settingsStorage.save(settings).then(() => {
return browser.runtime.sendMessage({
type: messages.SETTINGS_RELOAD
}).then(() => {
return set(settings);
});
}).then(() => {
return set(settings);
});
};

@ -0,0 +1,31 @@
import DefaultSettings from './default';
import * as settingsValues from './values';
const loadRaw = () => {
return browser.storage.local.get('settings').then(({ settings }) => {
if (!settings) {
return DefaultSettings;
}
return Object.assign({}, DefaultSettings, settings);
});
};
const loadValue = () => {
return loadRaw().then((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);
}
return value;
});
};
const save = (settings) => {
return browser.storage.local.set({
settings,
});
};
export { loadRaw, loadValue, save };

@ -0,0 +1,19 @@
import { expect } from "chai";
import actions from 'background/actions';
import settingReducer from 'background/reducers/setting';
describe("setting reducer", () => {
it('return the initial state', () => {
let state = settingReducer(undefined, {});
expect(state).to.have.deep.property('value', {});
});
it('return next state for SETTING_SET_SETTINGS', () => {
let action = {
type: actions.SETTING_SET_SETTINGS,
value: { key: 123 },
};
let state = settingReducer(undefined, action);
expect(state).to.have.deep.property('value', { key: 123 });
});
});