diff --git a/app/assets/javascripts/components/AutocompleteTagInput.tsx b/app/assets/javascripts/components/AutocompleteTagInput.tsx index a6e6148d8..52b241b81 100644 --- a/app/assets/javascripts/components/AutocompleteTagInput.tsx +++ b/app/assets/javascripts/components/AutocompleteTagInput.tsx @@ -18,6 +18,7 @@ export const AutocompleteTagInput: FunctionalComponent = ({ }) => { const [searchQuery, setSearchQuery] = useState(''); const [dropdownVisible, setDropdownVisible] = useState(false); + const [dropdownMaxHeight, setDropdownMaxHeight] = useState('auto'); const getActiveNoteTagResults = (query: string) => { const { activeNote } = appState.notes; @@ -28,11 +29,19 @@ export const AutocompleteTagInput: FunctionalComponent = ({ return getActiveNoteTagResults(''); }); + const inputRef = useRef(); const dropdownRef = useRef(); const [closeOnBlur] = useCloseOnBlur(dropdownRef, (visible: boolean) => setDropdownVisible(visible) ); + const showDropdown = () => { + const { clientHeight } = document.documentElement; + const inputRect = inputRef.current.getBoundingClientRect(); + setDropdownMaxHeight(clientHeight - inputRect.bottom - 32*2); + setDropdownVisible(true); + }; + const onSearchQueryChange = (event: Event) => { const query = (event.target as HTMLInputElement).value; const tags = getActiveNoteTagResults(query); @@ -46,9 +55,10 @@ export const AutocompleteTagInput: FunctionalComponent = ({
event.preventDefault()} className="mt-2"> setDropdownVisible(true)} + onChange={showDropdown} > = ({ onBlur={closeOnBlur} onFocus={() => { if (tagResults.length > 0) { - setDropdownVisible(true); + showDropdown(); } }} /> {dropdownVisible && ( {tagResults.map((tag) => { return (