From 48e257e5af0831246e4d3006755c653640afb658 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Fri, 29 Jan 2021 11:54:50 +0530 Subject: [PATCH] =?UTF-8?q?1)=20Fixed=20an=20issue=20where=C2=A0Zoom=20to?= =?UTF-8?q?=20fit=C2=A0button=20only=20works=20if=20the=20diagram=20is=20l?= =?UTF-8?q?arger=20than=20the=20canvas.=20Fixes=20#6163=202)=20Ensure=20th?= =?UTF-8?q?at=20the=20diagram=20should=20not=20vanish=20entirely=20if=20zo?= =?UTF-8?q?oming=20out=20too=20far=20in=20ERD.=20Fixes=20#6164=203)=20Fixe?= =?UTF-8?q?d=20an=20issue=20where=C2=A0Generate=20SQL=20displayed=20twice?= =?UTF-8?q?=20in=20the=20ERD=20tool.=20Fixes=20#6179=204)=20Updated=20miss?= =?UTF-8?q?ing=20documentation=20for=20the=20'Download=20Image'=20option?= =?UTF-8?q?=20in=20ERD.=20Fixes=20#6180?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en_US/erd_tool.rst | 3 +++ docs/en_US/images/erd_tool_toolbar.png | Bin 20928 -> 29785 bytes docs/en_US/release_notes_5_0.rst | 9 +++++++++ web/pgadmin/tools/erd/__init__.py | 18 ++++++++++++++++++ .../tools/erd/static/js/erd_tool/ERDCore.js | 7 ++++--- .../js/erd_tool/ui_components/BodyWidget.jsx | 11 ++++++++--- .../javascript/erd/erd_core_spec.js | 4 ++-- 7 files changed, 44 insertions(+), 8 deletions(-) diff --git a/docs/en_US/erd_tool.rst b/docs/en_US/erd_tool.rst index 6faa7317a..e8493fc9a 100644 --- a/docs/en_US/erd_tool.rst +++ b/docs/en_US/erd_tool.rst @@ -62,6 +62,9 @@ Export Options | *Generate SQL* | Click the *Generate SQL* icon to generate the DDL SQL for the diagram and open a query tool | Option + Ctrl +| | | with the generated SQL ready for execution. | S | +----------------------+---------------------------------------------------------------------------------------------------+----------------+ + | *Download image* | Click the *Download image* icon to save the ERD diagram in a image formate | Option + Ctrl +| + | | | I | + +----------------------+---------------------------------------------------------------------------------------------------+----------------+ Editing Options *************** diff --git a/docs/en_US/images/erd_tool_toolbar.png b/docs/en_US/images/erd_tool_toolbar.png index 55cda263680c802581ab8c9b282001ac4f01dba4..1491dc78becd70db65caf950ba8c4e5870a06016 100644 GIT binary patch delta 26337 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

?EYNdh||B>d$HoCm-Yl|cvF2h-+?TI5N3 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 RvmqYIN-0W~zcc#s{{Z=wt+oIF diff --git a/docs/en_US/release_notes_5_0.rst b/docs/en_US/release_notes_5_0.rst index 8c2134d18..80987ce57 100644 --- a/docs/en_US/release_notes_5_0.rst +++ b/docs/en_US/release_notes_5_0.rst @@ -19,3 +19,12 @@ Bug fixes | `Issue #5871 `_ - Ensure that username should be visible in the 'Connect to Server' popup when service and user name both specified. | `Issue #6045 `_ - Fixed autocomplete issue where it is not showing any suggestions if the schema name contains escape characters. +| `Issue #6163 `_ - Fixed an issue where Zoom to fit button only works if the diagram is larger than the canvas. +| `Issue #6164 `_ - Ensure that the diagram should not vanish entirely if zooming out too far in ERD. +| `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. + +. Documentation missing for 'Download Image' option in ERD. Fixes #6180. +2. Generate SQL displayed twice in ERD tool. Fixes #6179. +3. Zooming out too far makes the diagram vanish entirely. Fixes #6164. +4. Zoom to fit button only works if the diagram is larger than the canvas. Fixes #6163. diff --git a/web/pgadmin/tools/erd/__init__.py b/web/pgadmin/tools/erd/__init__.py index 1ce742186..8294a31a9 100644 --- a/web/pgadmin/tools/erd/__init__.py +++ b/web/pgadmin/tools/erd/__init__.py @@ -144,6 +144,24 @@ class ERDModule(PgAdminModule): fields=shortcut_fields ) + self.preference.register( + 'keyboard_shortcuts', + 'download_image', + gettext('Download image'), + 'keyboardshortcut', + { + 'alt': True, + 'shift': False, + 'control': True, + 'key': { + 'key_code': 73, + 'char': 'i' + } + }, + category_label=PREF_LABEL_KEYBOARD_SHORTCUTS, + fields=shortcut_fields + ) + self.preference.register( 'keyboard_shortcuts', 'add_table', 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 8faae4d01..865fc120f 100644 --- a/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js +++ b/web/pgadmin/tools/erd/static/js/erd_tool/ERDCore.js @@ -355,14 +355,15 @@ export default class ERDCore { zoomOut() { let model = this.getEngine().getModel(); - if(model) { - model.setZoomLevel(model.getZoomLevel() - 25); + let zoomLevel = model.getZoomLevel(); + if(model && zoomLevel > 25) { + model.setZoomLevel(zoomLevel - 25); this.repaint(); } } zoomToFit() { - this.getEngine().zoomToFit(); + this.getEngine().zoomToFitNodes(); } // Sample call: this.fireAction({ type: 'keydown', ctrlKey: true, code: 'KeyN' }); 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 1e3eff031..c36d87e03 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 @@ -158,6 +158,7 @@ export default class BodyWidget extends React.Component { [this.state.preferences.save_project, this.onSaveDiagram], [this.state.preferences.save_project_as, this.onSaveAsDiagram], [this.state.preferences.generate_sql, this.onSQLClick], + [this.state.preferences.download_image, this.onImageClick], [this.state.preferences.add_table, this.onAddNewNode], [this.state.preferences.edit_table, this.onEditNode], [this.state.preferences.clone_table, this.onCloneNode], @@ -556,9 +557,13 @@ export default class BodyWidget extends React.Component { link.click(); }).catch((err)=>{ console.error(err); + let msg = gettext('Unknown error. Check console logs'); + if(err.name) { + msg = `${err.name}: ${err.message}`; + } this.props.alertify.alert() .set('title', gettext('Error')) - .set('message', err).show(); + .set('message', msg).show(); }).then(()=>{ /* Revert back to the original CSS styles */ this.canvasEle.classList.remove('html2canvas-reset'); @@ -738,8 +743,8 @@ export default class BodyWidget extends React.Component { - + { 'registerListener': null, }), 'repaintCanvas': null, - 'zoomToFit': null, + 'zoomToFitNodes': null, 'fireEvent': null, }); @@ -352,7 +352,7 @@ describe('ERDCore', ()=>{ it('zoomToFit', ()=>{ erdCoreObj.zoomToFit(); - expect(erdEngine.zoomToFit).toHaveBeenCalled(); + expect(erdEngine.zoomToFitNodes).toHaveBeenCalled(); }); it('fireAction', ()=>{