fix: popover closing on delete dialog (#1022)
This commit is contained in:
@@ -41,7 +41,7 @@ export const AttachedFilesButton: FunctionComponent<Props> = observer(
|
|||||||
const buttonRef = useRef<HTMLButtonElement>(null)
|
const buttonRef = useRef<HTMLButtonElement>(null)
|
||||||
const panelRef = useRef<HTMLDivElement>(null)
|
const panelRef = useRef<HTMLDivElement>(null)
|
||||||
const containerRef = useRef<HTMLDivElement>(null)
|
const containerRef = useRef<HTMLDivElement>(null)
|
||||||
const [closeOnBlur, keepMenuOpen] = useCloseOnBlur(containerRef, setOpen)
|
const [closeOnBlur, keepMenuOpen] = useCloseOnBlur(containerRef, setOpen, true)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (appState.filePreviewModal.isOpen) {
|
if (appState.filePreviewModal.isOpen) {
|
||||||
|
|||||||
@@ -8,16 +8,20 @@ import { StateUpdater, useCallback, useState } from 'preact/hooks'
|
|||||||
export function useCloseOnBlur(
|
export function useCloseOnBlur(
|
||||||
container: { current?: HTMLDivElement | null },
|
container: { current?: HTMLDivElement | null },
|
||||||
setOpen: (open: boolean) => void,
|
setOpen: (open: boolean) => void,
|
||||||
|
keepOpenOnDialogs = false,
|
||||||
): [(event: { relatedTarget: EventTarget | null }) => void, StateUpdater<boolean>] {
|
): [(event: { relatedTarget: EventTarget | null }) => void, StateUpdater<boolean>] {
|
||||||
const [locked, setLocked] = useState(false)
|
const [locked, setLocked] = useState(false)
|
||||||
return [
|
return [
|
||||||
useCallback(
|
useCallback(
|
||||||
function onBlur(event: { relatedTarget: EventTarget | null }) {
|
function onBlur(event: { relatedTarget: EventTarget | null }) {
|
||||||
if (!locked && !container.current?.contains(event.relatedTarget as Node)) {
|
setTimeout(() => {
|
||||||
setOpen(false)
|
const keepOpen = keepOpenOnDialogs && document.activeElement?.closest('[role="dialog"], .sk-modal')
|
||||||
}
|
if (!keepOpen && !locked && !container.current?.contains(event.relatedTarget as Node)) {
|
||||||
|
setOpen(false)
|
||||||
|
}
|
||||||
|
})
|
||||||
},
|
},
|
||||||
[container, setOpen, locked],
|
[keepOpenOnDialogs, locked, container, setOpen],
|
||||||
),
|
),
|
||||||
setLocked,
|
setLocked,
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user