Skip to content

Commit b247208

Browse files
feat: show confirmation when leave quote page with unsaved changes (#1548)
1 parent cd8f9b7 commit b247208

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

client-app/modules/quotes/pages/edit-quote.vue

+29-2
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ import { cloneDeep, every, isEqual, remove } from "lodash";
118118
import { useField } from "vee-validate";
119119
import { computed, onMounted, ref, watchEffect } from "vue";
120120
import { useI18n } from "vue-i18n";
121-
import { useRouter } from "vue-router";
121+
import { onBeforeRouteLeave, onBeforeRouteUpdate, useRouter } from "vue-router";
122122
import { string } from "yup";
123123
import { useBreadcrumbs, usePageHead } from "@/core/composables";
124124
import { useModuleSettings } from "@/core/composables/useModuleSettings";
@@ -128,7 +128,7 @@ import { asyncForEach, isEqualAddresses } from "@/core/utilities";
128128
import { FILE_UPLOAD_SCOPE_NAME, MODULE_ID } from "@/modules/quotes/constants";
129129
import { useUser, useUserAddresses } from "@/shared/account";
130130
import { SelectAddressModal } from "@/shared/checkout";
131-
import { AddressSelection } from "@/shared/common";
131+
import { AddressSelection, SaveChangesModal } from "@/shared/common";
132132
import { useOrganizationAddresses } from "@/shared/company";
133133
import { downloadFile, useFiles } from "@/shared/files";
134134
import { useModal } from "@/shared/modal";
@@ -466,4 +466,31 @@ watchEffect(async () => {
466466
comment.value = quote.value?.comment;
467467
setBillingAddressEqualsShipping();
468468
});
469+
470+
async function canChangeRoute(): Promise<boolean> {
471+
return !canSaveChanges.value || (await openSaveChangesModal());
472+
}
473+
474+
async function openSaveChangesModal(): Promise<boolean> {
475+
return await new Promise<boolean>((resolve) => {
476+
openModal({
477+
component: SaveChangesModal,
478+
props: {
479+
title: t("pages.account.list_details.save_changes"),
480+
message: t("common.messages.save_changes"),
481+
onConfirm: async () => {
482+
closeModal();
483+
await saveChanges();
484+
resolve(true);
485+
},
486+
onClose: () => {
487+
resolve(true);
488+
},
489+
},
490+
});
491+
});
492+
}
493+
494+
onBeforeRouteLeave(canChangeRoute);
495+
onBeforeRouteUpdate(canChangeRoute);
469496
</script>

0 commit comments

Comments
 (0)