From e2585200ac992a28a891c2e913f259f7810bebfb Mon Sep 17 00:00:00 2001 From: Antonella Sgarlatta Date: Mon, 24 May 2021 18:28:13 -0300 Subject: [PATCH] fix: make dropdown height adjust to screen --- .../components/AutocompleteTagInput.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/components/AutocompleteTagInput.tsx b/app/assets/javascripts/components/AutocompleteTagInput.tsx index a6e6148d828..52b241b81cc 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 (