/** @module registermap */
/**
* 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