diff --git a/docs/en_US/images/preferences_browser_display.png b/docs/en_US/images/preferences_browser_display.png index e9d0c096c..f219832e0 100644 Binary files a/docs/en_US/images/preferences_browser_display.png and b/docs/en_US/images/preferences_browser_display.png differ diff --git a/docs/en_US/release_notes_4_15.rst b/docs/en_US/release_notes_4_15.rst index aacb88375..76c12ea27 100644 --- a/docs/en_US/release_notes_4_15.rst +++ b/docs/en_US/release_notes_4_15.rst @@ -10,7 +10,7 @@ New features ************ | `Issue #1974 `_ - Added encrypted password in reverse engineered SQL for roles. -| `Issue #4351 `_ - Add an option to request confirmation before cancelling changes on a Properties dialog. +| `Issue #4351 `_ - Add an option to request confirmation before cancelling/resetting changes on a Properties dialog. | `Issue #4006 `_ - Support Enable Always and Enable Replica on triggers. Housekeeping diff --git a/web/pgadmin/browser/register_browser_preferences.py b/web/pgadmin/browser/register_browser_preferences.py index b6e99e9fe..48857b202 100644 --- a/web/pgadmin/browser/register_browser_preferences.py +++ b/web/pgadmin/browser/register_browser_preferences.py @@ -56,12 +56,12 @@ def register_browser_preferences(self): self.preference.register( 'display', 'confirm_on_properties_close', - gettext("Confirm before closing properties with unsaved changes?"), + gettext("Confirm before Close/Reset in object properties dialog ?"), 'boolean', True, category_label=gettext('Display'), help_str=gettext( - 'Confirm before closure of the properties dialog for an object if ' - 'the changes are not saved.' + 'Confirm before closing or resetting the changes in the ' + 'properties dialog for an object if the changes are not saved.' ) ) diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js index 292d60c0d..c6f15c443 100644 --- a/web/pgadmin/browser/static/js/node.js +++ b/web/pgadmin/browser/static/js/node.js @@ -1241,6 +1241,39 @@ define('pgadmin.browser.node', [ window.open(that.dialogHelp, 'pgadmin_help'); }.bind(panel), + warnBeforeChangesLost = function(warn_text, yes_callback) { + var j = this.$container.find('.obj_properties').first(), + view = j && j.data('obj-view'), + self = this; + + let confirm_on_properties_close = pgBrowser.get_preferences_for_module('browser').confirm_on_properties_close; + if (confirm_on_properties_close && confirm_close && view && view.model) { + if(view.model.sessChanged()){ + Alertify.confirm( + gettext('Warning'), + warn_text, + function() { + setTimeout(function(){ + yes_callback(); + }.bind(self), 50); + return true; + }, + function() { + return true; + } + ).set('labels', { + ok: gettext('Yes'), + cancel: gettext('No'), + }).show(); + } else { + return true; + } + } else { + yes_callback(); + return true; + } + }.bind(panel), + onSave = function(view, saveBtn) { var m = view.model, d = m.toJSON(true), @@ -1413,9 +1446,15 @@ define('pgadmin.browser.node', [ disabled: true, register: function(btn) { btn.on('click',() => { - setTimeout(function() { - editFunc.call(); - }, 0); + warnBeforeChangesLost.call( + panel, + gettext('Changes will be lost. Are you sure you want to reset?'), + function() { + setTimeout(function() { + editFunc.call(); + }, 0); + } + ); }); }, }, { @@ -1539,38 +1578,14 @@ define('pgadmin.browser.node', [ onEdit = editInNewPanel.bind(panel); } if (panel.closeable()) { - panel.on(wcDocker.EVENT.CLOSING, function() { - var j = this.$container.find('.obj_properties').first(), - view = j && j.data('obj-view'), - self = this; - - let confirm_on_properties_close = pgBrowser.get_preferences_for_module('browser').confirm_on_properties_close; - if (confirm_on_properties_close && confirm_close && view && view.model) { - if(view.model.sessChanged()){ - Alertify.confirm( - gettext('Warning'), - gettext('Changes will be lost. Are you sure you want to close the dialog?'), - function() { - setTimeout(function(){ - self.off(wcDocker.EVENT.CLOSING); - self.close(); - }, 50); - return true; - }, - function() { - return true; - } - ).set('labels', { - ok: gettext('Yes'), - cancel: gettext('No'), - }).show(); - } else { - return true; - } - } else { - return true; + panel.on(wcDocker.EVENT.CLOSING, warnBeforeChangesLost.bind( + panel, + gettext('Changes will be lost. Are you sure you want to close the dialog?'), + function() { + panel.off(wcDocker.EVENT.CLOSING); + panel.close(); } - }.bind(panel)); + )); var onCloseFunc = function() { var j = this.$container.find('.obj_properties').first(),