navidrome/ui/src/dialogs/useDialog.js

31 lines
689 B
JavaScript

import { useCallback, useMemo, useState } from 'react'
// Idea from https://blog.bitsrc.io/new-react-design-pattern-return-component-from-hooks-79215c3eac00
export const useDialog = () => {
const [anchorEl, setAnchorEl] = useState(null)
const openDialog = useCallback((event) => {
event?.stopPropagation()
setAnchorEl(event.currentTarget)
}, [])
const closeDialog = useCallback((event) => {
event?.stopPropagation()
setAnchorEl(null)
}, [])
const props = useMemo(() => {
return {
anchorEl,
open: Boolean(anchorEl),
onClose: closeDialog,
}
}, [anchorEl, closeDialog])
return {
openDialog,
closeDialog,
props,
}
}