diff --git a/assets/js/dashboard/components/combobox.js b/assets/js/dashboard/components/combobox.js index 0d8d3229a618..8304587f49ab 100644 --- a/assets/js/dashboard/components/combobox.js +++ b/assets/js/dashboard/components/combobox.js @@ -5,6 +5,7 @@ import React, { useEffect, useRef } from 'react' +import { createPortal } from 'react-dom' import { Spinner } from './icons' import { Transition } from '@headlessui/react' import { ChevronDownIcon } from '@heroicons/react/20/solid' @@ -68,6 +69,8 @@ export default function PlausibleCombobox({ const searchRef = useRef(null) const containerRef = useRef(null) const listRef = useRef(null) + const boxRef = useRef(null) + const [dropdownStyle, setDropdownStyle] = useState({}) const loading = isLoading || !!forceLoading @@ -198,10 +201,24 @@ export default function PlausibleCombobox({ setOpen(false) } + useEffect(() => { + if (isOpen && boxRef.current) { + const rect = boxRef.current.getBoundingClientRect() + setDropdownStyle({ + top: rect.bottom + 4, + left: rect.left, + width: rect.width + }) + } + }, [isOpen]) + const handleClick = useCallback((e) => { if (containerRef.current && containerRef.current.contains(e.target)) { return } + if (listRef.current && listRef.current.contains(e.target)) { + return + } setSearch('') setOpen(false) @@ -348,7 +365,7 @@ export default function PlausibleCombobox({ return (