diff options
Diffstat (limited to 'frontend/app/views/page/page.reducer.js')
| -rw-r--r-- | frontend/app/views/page/page.reducer.js | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/frontend/app/views/page/page.reducer.js b/frontend/app/views/page/page.reducer.js new file mode 100644 index 0000000..c2d231a --- /dev/null +++ b/frontend/app/views/page/page.reducer.js @@ -0,0 +1,202 @@ +import * as types from 'app/types' +// import { session, getDefault, getDefaultInt } from 'app/session' + +import { crudState, crudReducer } from 'app/api/crud.reducer' + +const initialState = crudState('page', { + editor: { + addingTile: false, + editingTile: false, + currentEditTileId: 0, + tileList: false, + }, + options: { + } +}) + +const reducer = crudReducer('page') + +export default function pageReducer(state = initialState, action) { + // console.log(action.type, action) + state = reducer(state, action) + switch (action.type) { + case types.tile.create: + return { + ...state, + show: { + ...state.show, + res: { + ...state.show.res, + tiles: state.show.res.tiles.concat(action.data.res), + } + } + } + + case types.page.update: + if (state.show.res && state.show.res.id === action.data.res.id) { + return { + ...state, + show: { + ...state.show, + res: { + ...action.data.res, + tiles: state.show.res.tiles, + } + } + } + } + return { + ...state, + show: { + ...state.show, + res: { + ...action.data.res, + } + } + } + + case types.page.update_page_tile: + console.log(action.tile) + return { + ...state, + show: { + ...state.show, + res: { + ...state.show.res, + tiles: state.show.res.tiles.map(tile => { + if (tile.id === action.tile.id) { + return { ...action.tile } + } else { + return tile + } + }), + } + } + } + + case types.tile.destroy: + return { + ...state, + show: { + ...state.show, + res: { + ...state.show.res, + tiles: state.show.res.tiles.filter(tile => tile.id !== action.data.id) + } + } + } + + // add tile UI + case types.page.show_add_tile_form: + return { + ...state, + editor: { + ...state.editor, + addingTile: true, + editingTile: false, + tileList: false, + } + } + + case types.page.hide_add_tile_form: + return { + ...state, + editor: { + ...state.editor, + addingTile: false, + } + } + + case types.page.toggle_add_tile_form: + return { + ...state, + editor: { + ...state.editor, + addingTile: !state.editor.addingTile, + editingTile: false, + tileList: false, + } + } + + // edit tile UI + case types.page.show_edit_tile_form: + return { + ...state, + editor: { + ...state.editor, + addingTile: false, + editingTile: true, + currentEditTileId: action.tile_id, + tileList: false, + } + } + + case types.page.hide_edit_tile_form: + return { + ...state, + editor: { + ...state.editor, + editingTile: false, + } + } + + // tile list UI + case types.page.show_tile_list: + return { + ...state, + editor: { + ...state.editor, + addingTile: false, + editingTile: false, + tileList: true, + } + } + + case types.page.hide_tile_list: + return { + ...state, + editor: { + ...state.editor, + tileList: false, + } + } + + case types.page.toggle_tile_list: + return { + ...state, + editor: { + ...state.editor, + addingTile: false, + editingTile: false, + tileList: !state.editor.tileList, + } + } + + case types.graph.toggle_edit_page_form: + return { + ...state, + editor: { + ...state.editor, + addingTile: false, + editingTile: false, + tileList: false, + } + } + + case types.page.set_tile_sort_order: + return { + ...state, + show: { + ...state.show, + res: { + ...state.res, + tiles: action.tiles, + } + } + } + + + default: + return state + } +} |
