summaryrefslogtreecommitdiff
path: root/frontend/app/views/page/page.reducer.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2020-09-26 14:56:02 +0200
committerJules Laplace <julescarbon@gmail.com>2020-09-26 14:56:02 +0200
commita17b76ac75f506f5da6fe8adf9c36632b60d4226 (patch)
treeabb0af0c4409b830dea2ef808c146223ee973933 /frontend/app/views/page/page.reducer.js
parent2231a6e1c05b07bb7ec5906716aedec93d02429c (diff)
refactor to use app-rooted js imports
Diffstat (limited to 'frontend/app/views/page/page.reducer.js')
-rw-r--r--frontend/app/views/page/page.reducer.js202
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
+ }
+}