From 381031925fb52dc0efb508334c5365b2251fffd0 Mon Sep 17 00:00:00 2001
From: Patrizio Bekerle <patrizio@bekerle.com>
Date: Wed, 4 Nov 2020 11:21:46 +0100
Subject: [PATCH] Fix issue that causes select2 to close immediately after
 opening

---
 packages/person-select/src/person-select.js | 22 ++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/packages/person-select/src/person-select.js b/packages/person-select/src/person-select.js
index 05abc17d..a9a5d9dc 100644
--- a/packages/person-select/src/person-select.js
+++ b/packages/person-select/src/person-select.js
@@ -80,15 +80,11 @@ export class PersonSelect extends ScopedElementsMixin(LitElement) {
         this.updateComplete.then(()=>{
             that.$select = that.$('#' + that.selectId);
 
-            // close the selector on blur of the web component
-            $(that).blur(() => {
-                // the 500ms delay is a workaround to actually get an item selected when clicking on it,
-                // because the blur gets also fired when clicking in the selector
-                setTimeout(() => {
-                    if (this.select2IsInitialized()) {
-                        that.$select.select2('close');
-                    }
-                }, 500);
+            // Close the popup when clicking outside of select2
+            document.addEventListener('click', (ev) => {
+                if (!ev.composedPath().includes(this)) {
+                    this._closeSelect2();
+                }
             });
 
             // try an init when user-interface is loaded
@@ -96,6 +92,14 @@ export class PersonSelect extends ScopedElementsMixin(LitElement) {
         });
     }
 
+    _closeSelect2() {
+        const $select = this.$('#' + this.selectId);
+        console.assert($select.length, "select2 missing");
+        if (this.select2IsInitialized($select)) {
+            $select.select2('close');
+        }
+    }
+
     initJSONLD(ignorePreset = false) {
         const that = this;
 
-- 
GitLab