diff --git a/docs/en_US/release_notes_5_0.rst b/docs/en_US/release_notes_5_0.rst index 052f20a6b..4d0344ee4 100644 --- a/docs/en_US/release_notes_5_0.rst +++ b/docs/en_US/release_notes_5_0.rst @@ -30,3 +30,4 @@ Bug fixes | `Issue #6179 `_ - Fixed an issue where Generate SQL displayed twice in the ERD tool. | `Issue #6180 `_ - Updated missing documentation for the 'Download Image' option in ERD. | `Issue #6187 `_ - Limit the upgrade check to run once per day. +| `Issue #6193 `_ - Ensure that ERD throws a warning before closing unsaved changes if open in a new tab. diff --git a/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js b/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js index f2de8edb9..3935af360 100644 --- a/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js +++ b/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js @@ -355,9 +355,14 @@ export default class ERDCore { zoomOut() { let model = this.getEngine().getModel(); - let zoomLevel = model.getZoomLevel(); - if(model && zoomLevel > 25) { - model.setZoomLevel(zoomLevel - 25); + if(model) { + let zoomLevel = model.getZoomLevel(); + zoomLevel -= 25; + /* Don't go belo zoom level 10 */ + if(zoomLevel <= 10) { + zoomLevel = 10; + } + model.setZoomLevel(zoomLevel); this.repaint(); } } diff --git a/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx b/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx index 90c284ab8..5451e868f 100644 --- a/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx +++ b/web/pgadmin/tools/erd/static/js/erd_tool/ui_components/BodyWidget.jsx @@ -235,6 +235,12 @@ export default class BodyWidget extends React.Component { if(this.props.params.gen) { await this.loadTablesData(); } + + window.addEventListener('beforeunload', this.onBeforeUnload.bind(this)); + } + + componentWillUnmount() { + window.removeEventListener('beforeunload', this.onBeforeUnload.bind(this)); } componentDidUpdate() { @@ -348,6 +354,15 @@ export default class BodyWidget extends React.Component { } } + onBeforeUnload(e) { + if(this.state.dirty) { + e.preventDefault(); + e.returnValue = 'prevent'; + } else { + delete e['returnValue']; + } + } + onEditNode() { const selected = this.diagram.getSelectedNodes(); if(selected.length == 1) {