Skip to content

Commit 7b881b7

Browse files
committed
🚸 [annict] ポップオーバーのクローズ判定をいい感じに
onClickAway
1 parent b710f12 commit 7b881b7

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/miraktest-annict/components/SeachWorkForm.tsx

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import clsx from "clsx"
2-
import React, { useEffect, useState } from "react"
2+
import React, { useEffect, useRef, useState } from "react"
33
import { Search } from "react-feather"
44
import { useDebounce } from "react-use"
55
import { generateGqlClient } from "../annictAPI"
@@ -46,9 +46,25 @@ export const SearchWorkForm: React.FC<{
4646
100,
4747
[localTerm]
4848
)
49+
const ref = useRef<HTMLDivElement>(null)
50+
useEffect(() => {
51+
const listener = (event: MouseEvent | TouchEvent) => {
52+
const target = event.composedPath().shift()
53+
if (!event || !ref.current || ref.current.contains(target as Node)) {
54+
return
55+
}
56+
setIsVisible(false)
57+
}
58+
document.addEventListener("mousedown", listener)
59+
document.addEventListener("touchstart", listener)
60+
return () => {
61+
document.removeEventListener("mousedown", listener)
62+
document.removeEventListener("touchstart", listener)
63+
}
64+
}, [ref])
4965

5066
return (
51-
<div className={clsx("relative")} onMouseLeave={() => setIsVisible(false)}>
67+
<div className={clsx("relative")} ref={ref}>
5268
<form
5369
className="flex items-center justify-center space-x-2"
5470
onSubmit={(e) => {

0 commit comments

Comments
 (0)