@@ -45,10 +45,9 @@ export function usePointerdownOutside(
4545 const target = event . target as HTMLElement
4646
4747 // TODO: wip
48- // if (isLayerExist(node.value, target)) {
49- // isPointerInsideDOMTree = false
50- // return
51- // }
48+ if ( ! isPointerInsideDOMTree && isInsideDOMTree ( node . value , target ) ) {
49+ isPointerInsideDOMTree = true
50+ }
5251
5352 if ( target && ! isPointerInsideDOMTree ) {
5453 const eventDetail = { originalEvent : event }
@@ -143,11 +142,15 @@ export function useFocusOutside(
143142 const ownerDocument = nodeVal . ownerDocument
144143
145144 async function handleFocus ( event : FocusEvent ) {
146- // await nextTick()
145+ await nextTick ( )
146+
147+ if ( ! node . value )
148+ return
147149
148150 // TODO: wip
149- // if (!node.value || isLayerExist(node.value, event.target as HTMLElement))
150- // return
151+ if ( ! isFocusInsideDOMTree && isInsideDOMTree ( node . value , event . target as HTMLElement ) ) {
152+ isFocusInsideDOMTree = true
153+ }
151154
152155 if ( event . target && ! isFocusInsideDOMTree ) {
153156 const eventDetail = { originalEvent : event }
@@ -163,23 +166,23 @@ export function useFocusOutside(
163166 return ret
164167}
165168
166- function isLayerExist ( layerElement : HTMLElement , targetElement : HTMLElement ) {
167- const targetLayer = targetElement . closest < HTMLElement > ( '[data-dismissable-layer]' )
169+ function isInsideDOMTree ( node : HTMLElement , targetElement : HTMLElement ) {
170+ const mainLayer = node . dataset . dismissableLayer === '' ? node : node . querySelector < HTMLElement > ( '[data-dismissable-layer]' )
168171
169- if ( ! targetLayer )
172+ if ( ! mainLayer )
170173 return false
171174
172- const mainLayer = layerElement . dataset . dismissableLayer === '' ? layerElement : layerElement . querySelector < HTMLElement > ( '[data-dismissable-layer]' )
175+ const targetLayer = targetElement . closest < HTMLElement > ( '[data-dismissable-layer]' )
173176
174- if ( ! mainLayer )
177+ if ( ! targetLayer )
175178 return false
176179
177180 if ( mainLayer === targetLayer )
178181 return true
179182
180- const nodeList = Array . from ( layerElement . ownerDocument . querySelectorAll < HTMLElement > ( '[data-dismissable-layer]' ) )
183+ const layerList = Array . from ( node . ownerDocument . querySelectorAll < HTMLElement > ( '[data-dismissable-layer]' ) )
181184
182- if ( nodeList . indexOf ( mainLayer ) < nodeList . indexOf ( targetLayer ) )
185+ if ( layerList . indexOf ( mainLayer ) < layerList . indexOf ( targetLayer ) )
183186 return true
184187
185188 return false
0 commit comments