UNPKG

awv3

Version:
86 lines (80 loc) 3.36 kB
import omit from 'lodash/omit'; import without from 'lodash/without'; import { actions as pluginActions } from './plugins'; import { actions as connectionActions } from './connections'; const scope = 'globals'; export const types = { setLocale: `${scope}/setLocale`, setActiveSelection: `${scope}/setActiveSelection`, setActiveConnection: `${scope}/setActiveConnection`, linkPlugins: `${scope}/linkPlugins`, unlinkPlugins: `${scope}/unlinkPlugins`, addResources: `${scope}/addResources`, addMessage: `${scope}/addMessage`, beginTask: `${scope}/beginTask`, finishTask: `${scope}/finishTask`, setCamera: `${scope}/setCamera`, setColors: `${scope}/setColors` }; export const actions = { setLocale: (locale = 'en_US') => ({ type: types.setLocale, locale }), setActiveSelection: (activeSelection = undefined) => ({ type: types.setActiveSelection, activeSelection }), addResources: resources => ({ type: types.addResources, resources }), linkPlugins: plugins => ({ type: types.linkPlugins, plugins }), unlinkPlugins: plugins => ({ type: types.unlinkPlugins, plugins }), addMessage: (type, message, reset) => ({ type: types.addMessage, type, message, reset }), beginTask: (id, command) => ({ type: types.beginTask, id, command }), finishTask: id => ({ type: types.finishTask, id }), setActiveConnection: (activeConnection = undefined) => dispatch => { dispatch(pluginActions.closeAllFeatures()); activeConnection && dispatch(connectionActions.setActiveFeature(activeConnection, undefined)); dispatch(actions.setActiveSelection()); dispatch({ type: types.setActiveConnection, activeConnection }); }, setCamera: (camera) => ({ type: types.setCamera, camera }), setColors: (values) => ({ type: types.setColors, values }) }; const originalState = { locale: 'en_US', url: '', activeConnection: undefined, activeSelection: undefined, tasks: {}, resources: {}, plugins: [], colors: { primary: '#c23369', accent: '#28d79f', text: '#373737' }, camera: 'perspective' }; export const reducer = (state = originalState, { type, ...payload }) => { switch (type) { case types.setLocale: case types.setActiveSelection: case types.setActiveConnection: case types.setCamera: return { ...state, ...payload }; case types.setColors: return { ...state, colors: { ...state.colors, ...payload.values } }; case types.addResources: return { ...state, resources: { ...state.resources, ...payload.resources } }; case types.linkPlugins: return { ...state, plugins: [...state.plugins, ...(Array.isArray(payload.plugins) ? payload.plugins : [payload.plugins])] }; case types.unlinkPlugins: return { ...state, plugins: without(state.plugins, Array.isArray(payload.plugins) ? payload.plugins : [payload.plugins]) }; case types.beginTask: return { ...state, tasks: { ...state.tasks, [payload.id]: payload.command } }; case types.finishTask: return { ...state, tasks: omit(state.tasks, payload.id) }; default: return state; } };