From 342652a7bdd624196b91c6c6eb9b32ff150bb2d6 Mon Sep 17 00:00:00 2001 From: homer2 Date: Fri, 24 Feb 2017 11:34:30 -0600 Subject: [PATCH] Fixed double confirmation alert When using ui-router version v0.3.1, the confirmation alert was appearing twice when doing a window.history.back(), once for $locationChangeStart and $stateChangeStart. --- src/unsavedChanges.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/unsavedChanges.js b/src/unsavedChanges.js index f5d47c0..4ed7307 100644 --- a/src/unsavedChanges.js +++ b/src/unsavedChanges.js @@ -196,22 +196,28 @@ angular.module('unsavedChanges', ['resettable']) var eventsToWatchFor = unsavedWarningsConfig.routeEvent; - angular.forEach(eventsToWatchFor, function(aEvent) { + angular.forEach(eventsToWatchFor, function (aEvent) { //calling this function later will unbind this, acting as $off() - var removeFn = $rootScope.$on(aEvent, function(event, next, current) { + var removeFn = $rootScope.$on(aEvent, function (event, next, current) { unsavedWarningsConfig.log("user is moving with " + aEvent); - // @todo this could be written a lot cleaner! - if (!allFormsClean()) { - unsavedWarningsConfig.log("a form is dirty"); - if (!confirm(unsavedWarningsConfig.navigateMessage)) { - unsavedWarningsConfig.log("user wants to cancel leaving"); - event.preventDefault(); // user clicks cancel, wants to stay on page + if (unsavedWarningsConfig.hasConfirmed) { + unsavedWarningsConfig.log("user already confirmed, skipping confirmation for " + aEvent); + } + else { + // @todo this could be written a lot cleaner! + if (!allFormsClean()) { + unsavedWarningsConfig.log("a form is dirty"); + if (!confirm(unsavedWarningsConfig.navigateMessage)) { + unsavedWarningsConfig.log("user wants to cancel leaving"); + event.preventDefault(); // user clicks cancel, wants to stay on page + } else { + unsavedWarningsConfig.hasConfirmed = true; + unsavedWarningsConfig.log("user doesn't care about loosing stuff"); + $rootScope.$broadcast('resetResettables'); + } } else { - unsavedWarningsConfig.log("user doesn't care about loosing stuff"); - $rootScope.$broadcast('resetResettables'); + unsavedWarningsConfig.log("all forms are clean"); } - } else { - unsavedWarningsConfig.log("all forms are clean"); } });