diff --git a/client/web/compose/src/app.js b/client/web/compose/src/app.js index 4474174f3..c033bd411 100644 --- a/client/web/compose/src/app.js +++ b/client/web/compose/src/app.js @@ -179,5 +179,11 @@ export default (options = {}) => { ...options, } + options.router.beforeEach((to, from, next) => { + store.dispatch('ui/setPreviousPage', from) + + next() + }) + return new Vue(options) } diff --git a/client/web/compose/src/components/Admin/EditorToolbar.vue b/client/web/compose/src/components/Admin/EditorToolbar.vue index 9cb317ae5..7244746d1 100644 --- a/client/web/compose/src/components/Admin/EditorToolbar.vue +++ b/client/web/compose/src/components/Admin/EditorToolbar.vue @@ -12,12 +12,11 @@ class="wrap-with-vertical-gutters align-items-center" > state.previousPages, + previousPage: (state) => state.previousPage, + getNextAndPrevRecord: ({ recordPaginationIDs }) => (recordID) => { const recordIndex = recordPaginationIDs.indexOf(recordID) const prev = recordIndex >= 0 ? recordPaginationIDs[recordIndex - 1] : undefined @@ -86,6 +91,16 @@ export default function (ComposeAPI) { commit(types.popPreviousPages) return new Promise((resolve) => resolve(previousPage)) }, + + setPreviousPage ({ commit }, value) { + const shouldNotSavePage = value.name !== 'admin.pages.builder' && + !value.query.layoutID && value.name !== 'admin.modules.create' && + value.name !== 'admin.charts.create' + + if (value && value.name && shouldNotSavePage) { + commit(types.setPreviousPage, value) + } + }, }, mutations: { @@ -128,6 +143,10 @@ export default function (ComposeAPI) { [types.popPreviousPages] (state) { return state.previousPages.pop() }, + + [types.setPreviousPage] (state, value) { + state.previousPage = value + }, }, } } diff --git a/client/web/compose/src/views/Admin/Charts/Edit.vue b/client/web/compose/src/views/Admin/Charts/Edit.vue index 1d0f2a6e9..60304cbe9 100644 --- a/client/web/compose/src/views/Admin/Charts/Edit.vue +++ b/client/web/compose/src/views/Admin/Charts/Edit.vue @@ -298,7 +298,6 @@ @@ -386,6 +386,7 @@ export default { ...mapGetters({ modules: 'module/set', modByID: 'module/getByID', + previousPage: 'ui/previousPage', }), colorSchemes () { @@ -651,7 +652,7 @@ export default { }, redirect () { - this.$router.push({ name: 'admin.charts' }) + this.$router.push(this.previousPage || { name: 'admin.charts' }) }, onEditReport (i) { diff --git a/client/web/compose/src/views/Admin/Modules/Edit.vue b/client/web/compose/src/views/Admin/Modules/Edit.vue index 9301f7589..55c5400bf 100644 --- a/client/web/compose/src/views/Admin/Modules/Edit.vue +++ b/client/web/compose/src/views/Admin/Modules/Edit.vue @@ -439,7 +439,6 @@ @@ -537,6 +537,7 @@ export default { computed: { ...mapGetters({ pages: 'page/set', + previousPage: 'ui/previousPage', }), title () { @@ -799,7 +800,7 @@ export default { this.toastSuccess(this.$t('notification:module.created')) if (closeOnSuccess) { - this.$router.push({ name: 'admin.modules' }) + this.$router.push(this.previousPage || { name: 'admin.modules' }) } else { this.$router.push({ name: 'admin.modules.edit', params: { moduleID: this.module.moduleID } }) } diff --git a/client/web/compose/src/views/Admin/Pages/Builder.vue b/client/web/compose/src/views/Admin/Pages/Builder.vue index de233f610..15d15c53d 100644 --- a/client/web/compose/src/views/Admin/Pages/Builder.vue +++ b/client/web/compose/src/views/Admin/Pages/Builder.vue @@ -254,13 +254,13 @@