Only setFocused false when click outside.
This commit is contained in:
parent
b2501d8145
commit
3667e81c6f
|
@ -1,5 +1,5 @@
|
||||||
import { Avatar } from './avatar'
|
import { Avatar } from './avatar'
|
||||||
import { useRef, useState } from 'react'
|
import { useEffect, useRef, useState } from 'react'
|
||||||
import { Spacer } from './layout/spacer'
|
import { Spacer } from './layout/spacer'
|
||||||
import { NewContract } from '../pages/create'
|
import { NewContract } from '../pages/create'
|
||||||
import { firebaseLogin, User } from '../lib/firebase/users'
|
import { firebaseLogin, User } from '../lib/firebase/users'
|
||||||
|
@ -78,8 +78,22 @@ export default function FeedCreate(props: {
|
||||||
)
|
)
|
||||||
const placeholder = props.placeholder ?? `e.g. ${placeholders[randIndex]}`
|
const placeholder = props.placeholder ?? `e.g. ${placeholders[randIndex]}`
|
||||||
|
|
||||||
|
const panelRef = useRef<HTMLElement | null>()
|
||||||
const inputRef = useRef<HTMLTextAreaElement | null>()
|
const inputRef = useRef<HTMLTextAreaElement | null>()
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const onClick = () => {
|
||||||
|
if (
|
||||||
|
panelRef.current &&
|
||||||
|
document.activeElement &&
|
||||||
|
!panelRef.current.contains(document.activeElement)
|
||||||
|
)
|
||||||
|
setFocused(false)
|
||||||
|
}
|
||||||
|
window.addEventListener('click', onClick)
|
||||||
|
return () => window.removeEventListener('click', onClick)
|
||||||
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={clsx(
|
className={clsx(
|
||||||
|
@ -87,7 +101,8 @@ export default function FeedCreate(props: {
|
||||||
question || focused ? 'ring-2 ring-indigo-300' : '',
|
question || focused ? 'ring-2 ring-indigo-300' : '',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
onClick={() => !question && inputRef.current?.focus()}
|
onClick={() => !focused && inputRef.current?.focus()}
|
||||||
|
ref={(elem) => (panelRef.current = elem)}
|
||||||
>
|
>
|
||||||
<div className="relative flex items-start space-x-3">
|
<div className="relative flex items-start space-x-3">
|
||||||
<Avatar username={user?.username} avatarUrl={user?.avatarUrl} noLink />
|
<Avatar username={user?.username} avatarUrl={user?.avatarUrl} noLink />
|
||||||
|
@ -105,7 +120,6 @@ export default function FeedCreate(props: {
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={(e) => e.stopPropagation()}
|
||||||
onChange={(e) => setQuestion(e.target.value.replace('\n', ''))}
|
onChange={(e) => setQuestion(e.target.value.replace('\n', ''))}
|
||||||
onFocus={() => setFocused(true)}
|
onFocus={() => setFocused(true)}
|
||||||
onBlur={() => setFocused(false)}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user