summaryrefslogtreecommitdiff
path: root/frontend/app/views/page/page.actions.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.actions.js
parent2231a6e1c05b07bb7ec5906716aedec93d02429c (diff)
refactor to use app-rooted js imports
Diffstat (limited to 'frontend/app/views/page/page.actions.js')
-rw-r--r--frontend/app/views/page/page.actions.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/frontend/app/views/page/page.actions.js b/frontend/app/views/page/page.actions.js
new file mode 100644
index 0000000..d2bbbe2
--- /dev/null
+++ b/frontend/app/views/page/page.actions.js
@@ -0,0 +1,110 @@
+import * as types from 'app/types'
+import { store } from 'app/store'
+import actions from 'app/actions'
+import { default as debounce } from 'lodash.debounce'
+import { post } from 'app/utils'
+
+const url = {
+ sortTiles: (id) => '/api/v1/page/' + id + '/sort',
+}
+
+// Add tile form
+
+export const showAddTileForm = () => dispatch => {
+ dispatch({ type: types.page.show_add_tile_form })
+}
+
+export const hideAddTileForm = () => dispatch => {
+ dispatch({ type: types.page.hide_add_tile_form })
+}
+
+export const toggleAddTileForm = () => dispatch => {
+ dispatch({ type: types.page.toggle_add_tile_form })
+}
+
+// Edit tile form
+
+export const showEditTileForm = tile_id => dispatch => {
+ dispatch({ type: types.page.show_edit_tile_form, tile_id })
+}
+
+export const hideEditTileForm = () => dispatch => {
+ dispatch({ type: types.page.hide_edit_tile_form })
+}
+
+export const toggleEditTileForm = () => dispatch => {
+ dispatch({ type: types.page.toggle_edit_tile_form })
+}
+
+// Tile list
+
+export const showTileList = () => dispatch => {
+ dispatch({ type: types.page.show_tile_list })
+}
+
+export const hideTileList = () => dispatch => {
+ dispatch({ type: types.page.hide_tile_list })
+}
+
+export const toggleTileList = () => dispatch => {
+ dispatch({ type: types.page.toggle_tile_list })
+}
+
+// Update local page tile state when we change it
+
+export const updatePageTile = tile => dispatch => {
+ dispatch({ type: types.page.update_page_tile, tile })
+}
+
+// Fetch graph/page when loading a new URL
+
+export const showGraphAndPageIfUnloaded = ({ graph_name, page_name }) => dispatch => (
+ new Promise((resolve, reject) => {
+ showGraphIfUnloaded({ graph_name })(dispatch)
+ .then(graph => (
+ actions.page.show('name/' + graph_name + '/' + page_name)
+ .then(resolve)
+ .catch(reject)
+ ))
+ .catch(reject)
+ })
+)
+
+export const showGraphIfUnloaded = ({ graph_name }) => dispatch => (
+ new Promise((resolve, reject) => {
+ const { res: graph } = store.getState().graph.show
+ if (graph && graph.path === graph_name) {
+ return resolve(graph)
+ }
+ actions.graph.show('name/' + graph_name)
+ .then(resolve)
+ .catch(reject)
+ })
+)
+
+// Sorting tiles in the tile list
+
+export const setTileSortOrder = (tiles) => dispatch => {
+ let oldTiles = store.getState().page.show.res.tiles
+ if (!isSameTileOrder(tiles, oldTiles)) {
+ updateTileSortOrder(tiles, dispatch)
+ }
+ dispatch({ type: types.page.set_tile_sort_order, tiles })
+}
+
+export const isSameTileOrder = (newTiles, oldTiles) => {
+ for (let i = 0; i < newTiles.length; i++) {
+ if (newTiles[i].id !== oldTiles[i].id) {
+ return false
+ }
+ }
+ return true
+}
+
+export const updateTileSortOrder = debounce((tiles, dispatch) => {
+ const { page_id } = tiles[0]
+ const order = tiles.map(tile => (tile.id))
+ console.log(page_id, order)
+ post(dispatch, types.page, 'sort', url.sortTiles(page_id), order)
+}, 1000)
+