From b106d61f68c93b26bb31a8a9f67cee8a5b191d73 Mon Sep 17 00:00:00 2001 From: Kostiantyn Miakshyn Date: Sat, 16 May 2026 19:28:37 +0200 Subject: [PATCH] fix: Prevent infinity loop on form deletion Signed-off-by: Kostiantyn Miakshyn --- src/Forms.vue | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Forms.vue b/src/Forms.vue index 9d2ceedc7..b1f922b82 100644 --- a/src/Forms.vue +++ b/src/Forms.vue @@ -152,7 +152,7 @@ import { loadState } from '@nextcloud/initial-state' import moment from '@nextcloud/moment' import { generateOcsUrl } from '@nextcloud/router' import { useIsMobile } from '@nextcloud/vue' -import { computed, onMounted, onUnmounted, ref } from 'vue' +import { computed, onMounted, onUnmounted, ref, watch } from 'vue' import { useRoute, useRouter } from 'vue-router' import NcAppContent from '@nextcloud/vue/components/NcAppContent' import NcAppNavigation from '@nextcloud/vue/components/NcAppNavigation' @@ -205,6 +205,7 @@ export default { const allSharedForms = ref([]) const showArchivedForms = ref(false) const canCreateForms = ref(loadState(appName, 'appConfig').canCreateForms) + const deletedFormHash = ref(null) const PERMISSION_TYPES = PermissionTypes.data().PERMISSION_TYPES @@ -219,6 +220,11 @@ export default { return false } + // Don't try to fetch if this form was just deleted + if (deletedFormHash.value === routeHash.value) { + return false + } + const form = [...forms.value, ...allSharedForms.value].find( (form) => form.hash === routeHash.value, ) @@ -435,12 +441,24 @@ export default { const deletedHash = forms.value[formIndex].hash forms.value.splice(formIndex, 1) + deletedFormHash.value = deletedHash if (deletedHash === routeHash.value && route.name !== 'root') { - router.push({ name: 'root' }) + // Navigate to root without triggering route guards + router.replace({ name: 'root' }) } } + // Reset deletedFormHash when navigating away from the deleted form + watch( + () => route.name, + (newRouteName) => { + if (newRouteName === 'root') { + deletedFormHash.value = null + } + }, + ) + const onLastUpdatedByEventBus = (id) => { const formIndex = forms.value.findIndex((form) => form.id === id) if (formIndex !== -1) {