From f35586c88122e12693ddcbd740291937f326d7b0 Mon Sep 17 00:00:00 2001 From: Jarek Danielak Date: Tue, 19 Nov 2024 22:56:57 +0100 Subject: [PATCH 1/2] feat: restore focus on the canvas when pop up is closed --- CHANGELOG.md | 2 ++ src/ElementTemplateChooser.js | 23 ++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13e293c..00ea6e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ All notable changes to [@bpmn-io/element-template-chooser](https://github.com/ca ___Note:__ Yet to be released changes appear here._ +* `FEAT`: restore focus on the canvas when pop up is closed + ## 1.0.0 * `FEAT`: use modern popup menu foundations diff --git a/src/ElementTemplateChooser.js b/src/ElementTemplateChooser.js index 714e405..4c045d3 100644 --- a/src/ElementTemplateChooser.js +++ b/src/ElementTemplateChooser.js @@ -10,18 +10,21 @@ import './ElementTemplateChooser.css'; * @param {ElementTemplates} elementTemplates * @param {Translate} translate * @param {PopupMenu} popupMenu + * @param {Canvas} canvas */ export default function ElementTemplateChooser( config, eventBus, elementTemplates, translate, - popupMenu) { + popupMenu, + canvas) { this._eventBus = eventBus; this._elementTemplates = elementTemplates; this._translate = translate; this._popupMenu = popupMenu; + this._canvas = canvas; const enableChooser = !config || config.elementTemplateChooser !== false; @@ -44,7 +47,8 @@ ElementTemplateChooser.$inject = [ 'eventBus', 'elementTemplates', 'translate', - 'popupMenu' + 'popupMenu', + 'canvas' ]; ElementTemplateChooser.prototype.open = function(element) { @@ -52,10 +56,22 @@ ElementTemplateChooser.prototype.open = function(element) { const popupMenu = this._popupMenu; const translate = this._translate; const eventBus = this._eventBus; + const canvas = this._canvas; + + const restoreCanvasFocus = () => { + + // Only available with diagram-js >= 15.0.0 + if (canvas && canvas.restoreFocus) { + canvas.restoreFocus(); + } + }; return new Promise((resolve, reject) => { - const handleClosed = () => reject('user-canceled'); + const handleClosed = () => { + reject('user-canceled'); + restoreCanvasFocus(); + }; eventBus.once('popupMenu.close', handleClosed); @@ -66,6 +82,7 @@ ElementTemplateChooser.prototype.open = function(element) { eventBus.off('popupMenu.close', handleClosed); resolve(template); + restoreCanvasFocus(); }); popupMenu.open(element, 'element-template-chooser', { x: 0, y: 0 }, { From 21477b02a0b20cb46ab1a1344daa3e56ca16403a Mon Sep 17 00:00:00 2001 From: Jarek Danielak Date: Wed, 20 Nov 2024 10:48:23 +0100 Subject: [PATCH 2/2] remove unnecessary check --- src/ElementTemplateChooser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ElementTemplateChooser.js b/src/ElementTemplateChooser.js index 4c045d3..467d1d1 100644 --- a/src/ElementTemplateChooser.js +++ b/src/ElementTemplateChooser.js @@ -61,7 +61,7 @@ ElementTemplateChooser.prototype.open = function(element) { const restoreCanvasFocus = () => { // Only available with diagram-js >= 15.0.0 - if (canvas && canvas.restoreFocus) { + if (canvas.restoreFocus) { canvas.restoreFocus(); } }; @@ -92,4 +92,4 @@ ElementTemplateChooser.prototype.open = function(element) { }); }); -}; \ No newline at end of file +};