|
@@ -0,0 +1,188 @@
|
|
|
+/**
|
|
|
+ * state.js
|
|
|
+ *
|
|
|
+ * Collection of everything which has to do with state changes.
|
|
|
+ * - actionTypes
|
|
|
+ * - actions
|
|
|
+ **/
|
|
|
+
|
|
|
+import { NAME } from './constants'
|
|
|
+import { registermapList, settingList } from './initialData'
|
|
|
+// import { call, put, takeEvery } from 'redux-saga/effects'
|
|
|
+
|
|
|
+/** actionTypes define what actions are handeled by the reducer. */
|
|
|
+export const actionTypes = {
|
|
|
+ CREATE_SETTING: `${NAME}/CREATE_SETTING`,
|
|
|
+ UPDATE_SETTING: `${NAME}/UPDATE_SETTING`,
|
|
|
+ DELETE_SETTING: `${NAME}/DELETE_SETTING`,
|
|
|
+ CREATE_REGISTERMAP: `${NAME}/CREATE_REGISTERMAP`,
|
|
|
+ UPDATE_REGISTERMAP: `${NAME}/UPDATE_REGISTERMAP`,
|
|
|
+ DELETE_REGISTERMAP: `${NAME}/DELETE_REGISTERMAP`,
|
|
|
+ LOAD_SAMPLES: `${NAME}/LOAD_SAMPLES`
|
|
|
+}
|
|
|
+
|
|
|
+/** actions is an object with references to all action creators */
|
|
|
+function createSetting (setting) {
|
|
|
+ return {
|
|
|
+ type: actionTypes.CREATE_SETTING,
|
|
|
+ setting
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function updateSetting (settingId, setting) {
|
|
|
+ return {
|
|
|
+ type: actionTypes.UPDATE_SETTING,
|
|
|
+ settingId,
|
|
|
+ setting
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function removeSetting (settingId) {
|
|
|
+ return {
|
|
|
+ type: actionTypes.DELETE_SETTING,
|
|
|
+ settingId
|
|
|
+ }
|
|
|
+}
|
|
|
+function createRegistermap (registermap) {
|
|
|
+ return {
|
|
|
+ type: actionTypes.CREATE_REGISTERMAP,
|
|
|
+ registermap
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function updateRegistermap (registermapId, registermap) {
|
|
|
+ return {
|
|
|
+ type: actionTypes.UPDATE_REGISTERMAP,
|
|
|
+ registermapId,
|
|
|
+ registermap
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function removeRegistermap (registermapId) {
|
|
|
+ return {
|
|
|
+ type: actionTypes.DELETE_REGISTERMAP,
|
|
|
+ registermapId
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function loadSamples () {
|
|
|
+ return {
|
|
|
+ type: actionTypes.LOAD_SAMPLES
|
|
|
+ }
|
|
|
+}
|
|
|
+export const actions = { createSetting, updateSetting, removeSetting, createRegistermap, updateRegistermap, removeRegistermap, loadSamples }
|
|
|
+
|
|
|
+/** state definition */
|
|
|
+export const state = {
|
|
|
+ registermap: [],
|
|
|
+ settings: []
|
|
|
+}
|
|
|
+
|
|
|
+/** reducer is called by the redux dispatcher and handles all component actions */
|
|
|
+function registermapSettings (state = {}, action) {
|
|
|
+ console.log(`Entering registermap setting reducer.`, state, action)
|
|
|
+ switch (action.type) {
|
|
|
+ case actionTypes.CREATE_SETTING:
|
|
|
+ console.log(`Creating setting.`, state, action)
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ [action.project.projectId]: action.project
|
|
|
+ }
|
|
|
+ case actionTypes.UPDATE_SETTING:
|
|
|
+ console.log(`Update setting.`, state, action)
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ [action.projectId]: action.project
|
|
|
+ }
|
|
|
+ case actionTypes.DELETE_SETTING:
|
|
|
+ console.log(`Delete setting.`, state, action)
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ [action.projectId]: null
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return state
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function registermapAction (state = {}, action) {
|
|
|
+ console.log(`Entering registermap reducer.`, state, action)
|
|
|
+ switch (action.type) {
|
|
|
+ case actionTypes.CREATE_REGISTERMAP:
|
|
|
+ console.log(`Creating registermap.`, state, action)
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ [action.project.projectId]: action.project
|
|
|
+ }
|
|
|
+ case actionTypes.UPDATE_REGISTERMAP:
|
|
|
+ console.log(`Update registermap.`, state, action)
|
|
|
+ const idx = state.findIndex(elem => { return (elem.id === action.registermapId) })
|
|
|
+ console.log(`Update registermap.`, idx)
|
|
|
+ const next = [
|
|
|
+ ...state.slice(0, idx),
|
|
|
+ action.registermap,
|
|
|
+ ...state.slice(idx + 1)
|
|
|
+ ]
|
|
|
+ console.log(`Update registermap.`, next)
|
|
|
+ return next
|
|
|
+ case actionTypes.DELETE_REGISTERMAP:
|
|
|
+ console.log(`Delete registermap.`, state, action)
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ [action.projectId]: null
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return state
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export function reducer (state = {}, action) {
|
|
|
+ console.log(`Entering registermap root reducer.`, state, action)
|
|
|
+ if (typeof action.settingId !== 'undefined') {
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ registermap: registermapSettings(state.registermap, action)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (typeof action.registermapId !== 'undefined') {
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ registermap: registermapAction(state.registermap, action)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ switch (action.type) {
|
|
|
+ case actionTypes.LOAD_SAMPLES:
|
|
|
+ console.log(`Loading samples.`, state, action, registermapList, settingList)
|
|
|
+ console.log({...state, registermap: registermapList, settings: settingList})
|
|
|
+ return {
|
|
|
+ ...state,
|
|
|
+ registermap: registermapList,
|
|
|
+ settings: settingList
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ return state
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** sagas are asynchronous workers (JS generators) to handle the state.
|
|
|
+// Worker
|
|
|
+export function * incrementAsync () {
|
|
|
+ try {
|
|
|
+ const data = yield call(Api.isIncrementOk)
|
|
|
+ yield put({ type: 'INCREMENT_SUCCESS', data })
|
|
|
+ } catch (error) {
|
|
|
+ yield put({ type: 'INCREMENT_FAIL', error})
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// Watcher (intercepts INCREMENT_REQUEST, dispatches INCREMENT_SUCCESS or INCREMENT_FAIL in return.)
|
|
|
+export function * watchIncrementAsync () {
|
|
|
+ yield takeEvery('INCREMENT_REQUEST', incrementAsync)
|
|
|
+}
|
|
|
+
|
|
|
+// export all sagas in parallel
|
|
|
+function * sagas () {
|
|
|
+ yield takeEvery('INCREMENT_REQUEST')
|
|
|
+ yield takeEvery('DECREMENT_REQUEST')
|
|
|
+} */
|
|
|
+export const sagas = null
|