From 40d96c411a2a2c7896c35d94add2a0e86f0c57b4 Mon Sep 17 00:00:00 2001 From: opensas Date: Mon, 19 Apr 2021 18:24:20 -0300 Subject: [PATCH] fixes clickOutside implementations --- src/lib/actions/additional-svelte-jsx.d.ts | 2 +- src/lib/actions/clickOutside.ts | 23 +++++++++--- src/lib/component/landing/Nav.svelte | 41 +++++++++------------- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/lib/actions/additional-svelte-jsx.d.ts b/src/lib/actions/additional-svelte-jsx.d.ts index dff80ae..3c9560f 100644 --- a/src/lib/actions/additional-svelte-jsx.d.ts +++ b/src/lib/actions/additional-svelte-jsx.d.ts @@ -1,6 +1,6 @@ declare namespace svelte.JSX { // eslint-disable-next-line @typescript-eslint/no-unused-vars interface HTMLAttributes { - onclick_outside?: () => void + onclickOutside?: (any) => void } } diff --git a/src/lib/actions/clickOutside.ts b/src/lib/actions/clickOutside.ts index 95e9c6a..7c56b9c 100644 --- a/src/lib/actions/clickOutside.ts +++ b/src/lib/actions/clickOutside.ts @@ -1,14 +1,13 @@ // source: https://svelte.dev/repl/0ace7a508bd843b798ae599940a91783?version=3.16.7 /** Dispatch event on click outside of node */ -export function clickOutside(node: HTMLElement): unknown { +const clickOutside = (node: HTMLElement): unknown => { const handleClick = event => { if (node && !node.contains(event.target) && !event.defaultPrevented) { - // onClickOutside(event) - node.dispatchEvent(new CustomEvent('click_outside')) + const detail = { event } // see: https://www.programmersought.com/article/93843748120/ + node.dispatchEvent(new CustomEvent('clickOutside', { detail })) } } - document.addEventListener('click', handleClick, true) return { @@ -17,3 +16,19 @@ export function clickOutside(node: HTMLElement): unknown { }, } } + +const clickOutsideAction = (node: HTMLElement, onEventFunction: (e: CustomEvent) => void): unknown => { + const handleClick = event => { + if (!node.contains(event.target)) onEventFunction(event) + } + + document.addEventListener('click', handleClick) + + return { + destroy() { + document.removeEventListener('click', handleClick) + }, + } +} + +export { clickOutside, clickOutsideAction } diff --git a/src/lib/component/landing/Nav.svelte b/src/lib/component/landing/Nav.svelte index 447a638..c58e2e3 100644 --- a/src/lib/component/landing/Nav.svelte +++ b/src/lib/component/landing/Nav.svelte @@ -1,30 +1,21 @@ @@ -79,8 +70,10 @@ + +