awv3
Version:
⚡ AWV3 embedded CAD
86 lines (80 loc) • 3.36 kB
JavaScript
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;
}
};