diff --git a/client/src/helpers/popover.ts b/client/src/helpers/popover.ts index cbea6248..f37df4d7 100644 --- a/client/src/helpers/popover.ts +++ b/client/src/helpers/popover.ts @@ -15,8 +15,17 @@ export default { _reject = reject; }); + const clickOutsideElementListener = (event: Event) => { + // inspired by https://stackoverflow.com/a/3028037/6071058 + if (!mountEl.contains(event.target as Node)) { + _reject(); + cleanUp(); + } + }; + const cleanUp = () => { mountEl?.parentNode?.removeChild(mountEl); + document.removeEventListener('click', clickOutsideElementListener); popover.unmount(); }; @@ -33,6 +42,10 @@ export default { }); popover.mount(mountEl); + + setTimeout(() => { + document.addEventListener('click', clickOutsideElementListener); + }, 1); // do not triger ont the same event that created the popover return promise; }, };