diff --git a/apps/explorer/src/comps/ExploreInput.tsx b/apps/explorer/src/comps/ExploreInput.tsx index 8a5fc84fb..74c36f9c9 100644 --- a/apps/explorer/src/comps/ExploreInput.tsx +++ b/apps/explorer/src/comps/ExploreInput.tsx @@ -2,6 +2,7 @@ import { keepPreviousData, queryOptions, useQuery } from '@tanstack/react-query' import { Address, Hex } from 'ox' import * as React from 'react' import { Midcut } from '#comps/Midcut' +import { useMountAnim } from '#lib/animation' import { ProgressLine } from '#comps/ProgressLine' import { RelativeTime } from '#comps/RelativeTime' import { cx } from '#cva.config' @@ -17,6 +18,7 @@ export function ExploreInput(props: ExploreInput.Props) { const { onActivate, inputRef: externalInputRef, + wrapperRef: externalWrapperRef, value, onChange, size = 'medium', @@ -33,8 +35,13 @@ export function ExploreInput(props: ExploreInput.Props) { const [showResults, setShowResults] = React.useState(false) const [selectedIndex, setSelectedIndex] = React.useState(-1) + const menuMounted = useMountAnim(showResults, resultsRef) const resultsId = React.useId() + // prevents the menu from reopening when + // activating a menu item fills the input + const submittingRef = React.useRef(false) + const query = value.trim() const isValidInput = query.length > 0 && @@ -91,6 +98,10 @@ export function ExploreInput(props: ExploreInput.Props) { ) React.useEffect(() => { + if (submittingRef.current) { + submittingRef.current = false + return + } setShowResults(disabled ? false : query.length > 0) }, [query, disabled]) @@ -133,6 +144,7 @@ export function ExploreInput(props: ExploreInput.Props) { const handleSelect = React.useCallback( (result: SearchResult) => { + submittingRef.current = true setShowResults(false) setSelectedIndex(-1) @@ -158,126 +170,138 @@ export function ExploreInput(props: ExploreInput.Props) { ) return ( -