From 89bf0660561790798a9d3885cce5293411a22aaa Mon Sep 17 00:00:00 2001 From: ian Date: Tue, 23 Nov 2021 00:50:09 +0800 Subject: [PATCH] Use router.replace() to prevent invalid back navigations (#9959) --- app/src/modules/content/components/navigation-bookmark.vue | 2 +- app/src/modules/content/routes/item.vue | 2 +- app/src/modules/files/components/navigation-folder.vue | 4 ++-- app/src/modules/files/routes/item.vue | 2 +- app/src/modules/insights/routes/dashboard.vue | 4 ++-- app/src/modules/settings/routes/data-model/fields/fields.vue | 2 +- .../modules/settings/routes/data-model/new-collection.vue | 2 +- app/src/modules/settings/routes/presets/item.vue | 2 +- app/src/modules/settings/routes/roles/item/item.vue | 2 +- .../routes/roles/permissions-detail/permissions-detail.vue | 5 +++-- app/src/modules/settings/routes/webhooks/item.vue | 2 +- app/src/modules/users/routes/item.vue | 2 +- 12 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/src/modules/content/components/navigation-bookmark.vue b/app/src/modules/content/components/navigation-bookmark.vue index 8d7ac64355..5953402995 100644 --- a/app/src/modules/content/components/navigation-bookmark.vue +++ b/app/src/modules/content/components/navigation-bookmark.vue @@ -154,7 +154,7 @@ export default defineComponent({ deleteActive.value = false; if (navigateTo) { - router.push(navigateTo); + router.replace(navigateTo); } } catch (err: any) { unexpectedError(err); diff --git a/app/src/modules/content/routes/item.vue b/app/src/modules/content/routes/item.vue index 2805b70bd8..2d574af48e 100644 --- a/app/src/modules/content/routes/item.vue +++ b/app/src/modules/content/routes/item.vue @@ -481,7 +481,7 @@ export default defineComponent({ try { await remove(); edits.value = {}; - router.push(`/content/${props.collection}`); + router.replace(`/content/${props.collection}`); } catch { // `remove` will show the unexpected error dialog } diff --git a/app/src/modules/files/components/navigation-folder.vue b/app/src/modules/files/components/navigation-folder.vue index 9820ab6ff3..a7a3f92247 100644 --- a/app/src/modules/files/components/navigation-folder.vue +++ b/app/src/modules/files/components/navigation-folder.vue @@ -276,9 +276,9 @@ export default defineComponent({ await api.delete(`/folders/${props.folder.id}`); if (newParent) { - router.push(`/files/folders/${newParent}`); + router.replace(`/files/folders/${newParent}`); } else { - router.push('/files'); + router.replace('/files'); } deleteActive.value = false; diff --git a/app/src/modules/files/routes/item.vue b/app/src/modules/files/routes/item.vue index cd0e76be19..fde34b36a3 100644 --- a/app/src/modules/files/routes/item.vue +++ b/app/src/modules/files/routes/item.vue @@ -404,7 +404,7 @@ export default defineComponent({ async function deleteAndQuit() { try { await remove(); - router.push(to.value); + router.replace(to.value); } catch { // `remove` will show the unexpected error dialog confirmDelete.value = false; diff --git a/app/src/modules/insights/routes/dashboard.vue b/app/src/modules/insights/routes/dashboard.vue index ac0e8d28dc..4c019b2c0f 100644 --- a/app/src/modules/insights/routes/dashboard.vue +++ b/app/src/modules/insights/routes/dashboard.vue @@ -90,7 +90,7 @@ :dashboard-key="primaryKey" :panel="panelKey ? panels.find((panel) => panel.id === panelKey) : null" @save="stageConfiguration" - @cancel="$router.push(`/insights/${primaryKey}`)" + @cancel="$router.replace(`/insights/${primaryKey}`)" /> @@ -361,7 +361,7 @@ export default defineComponent({ function stageConfiguration(edits: Partial) { stagePanelEdits({ edits }); - router.push(`/insights/${props.primaryKey}`); + router.replace(`/insights/${props.primaryKey}`); } async function saveChanges() { diff --git a/app/src/modules/settings/routes/data-model/fields/fields.vue b/app/src/modules/settings/routes/data-model/fields/fields.vue index ae8d2ad234..083a00d34d 100644 --- a/app/src/modules/settings/routes/data-model/fields/fields.vue +++ b/app/src/modules/settings/routes/data-model/fields/fields.vue @@ -204,7 +204,7 @@ export default defineComponent({ await remove(); await collectionsStore.hydrate(); await fieldsStore.hydrate(); - router.push(`/settings/data-model`); + router.replace(`/settings/data-model`); } async function saveAndStay() { diff --git a/app/src/modules/settings/routes/data-model/new-collection.vue b/app/src/modules/settings/routes/data-model/new-collection.vue index e98a4d2beb..cc5fb2128d 100644 --- a/app/src/modules/settings/routes/data-model/new-collection.vue +++ b/app/src/modules/settings/routes/data-model/new-collection.vue @@ -264,7 +264,7 @@ export default defineComponent({ type: 'success', }); - router.push(`/settings/data-model/${collectionName.value}`); + router.replace(`/settings/data-model/${collectionName.value}`); } catch (err: any) { unexpectedError(err); } finally { diff --git a/app/src/modules/settings/routes/presets/item.vue b/app/src/modules/settings/routes/presets/item.vue index a4c67d7fe3..8488708c10 100644 --- a/app/src/modules/settings/routes/presets/item.vue +++ b/app/src/modules/settings/routes/presets/item.vue @@ -314,7 +314,7 @@ export default defineComponent({ try { await api.delete(`/presets/${props.id}`); - router.push(`/settings/presets`); + router.replace(`/settings/presets`); } catch (err: any) { unexpectedError(err); } finally { diff --git a/app/src/modules/settings/routes/roles/item/item.vue b/app/src/modules/settings/routes/roles/item/item.vue index 3f5dcdae09..1d1e8a29da 100644 --- a/app/src/modules/settings/routes/roles/item/item.vue +++ b/app/src/modules/settings/routes/roles/item/item.vue @@ -232,7 +232,7 @@ export default defineComponent({ async function deleteAndQuit() { await remove(); - router.push(`/settings/roles`); + router.replace(`/settings/roles`); } function discardAndLeave() { diff --git a/app/src/modules/settings/routes/roles/permissions-detail/permissions-detail.vue b/app/src/modules/settings/routes/roles/permissions-detail/permissions-detail.vue index 9d6d5a4941..9d37bade2a 100644 --- a/app/src/modules/settings/routes/roles/permissions-detail/permissions-detail.vue +++ b/app/src/modules/settings/routes/roles/permissions-detail/permissions-detail.vue @@ -179,9 +179,10 @@ export default defineComponent({ async function close() { if (permission.value && isPermissionEmpty(permission.value)) { await api.delete(`/permissions/${permission.value.id}`); + router.replace(`/settings/roles/${props.roleKey || 'public'}`); + } else { + router.push(`/settings/roles/${props.roleKey || 'public'}`); } - - router.push(`/settings/roles/${props.roleKey || 'public'}`); } async function load() { diff --git a/app/src/modules/settings/routes/webhooks/item.vue b/app/src/modules/settings/routes/webhooks/item.vue index 2da4dbe738..cddebe979b 100644 --- a/app/src/modules/settings/routes/webhooks/item.vue +++ b/app/src/modules/settings/routes/webhooks/item.vue @@ -210,7 +210,7 @@ export default defineComponent({ async function deleteAndQuit() { await remove(); - router.push(`/settings/webhooks`); + router.replace(`/settings/webhooks`); } function discardAndLeave() { diff --git a/app/src/modules/users/routes/item.vue b/app/src/modules/users/routes/item.vue index 7efb020baa..7fad81228d 100644 --- a/app/src/modules/users/routes/item.vue +++ b/app/src/modules/users/routes/item.vue @@ -432,7 +432,7 @@ export default defineComponent({ async function deleteAndQuit() { try { await remove(); - router.push(`/users`); + router.replace(`/users`); } catch { // `remove` will show the unexpected error dialog }