Show tooltip immediately if a tooltip is already open (#28870)

* Memoize delayProps
* Refactor Escape key handler
* Use useTooltipContext
* Remove delay: 0 from tooltips
* Only use isTooltipOpen if available
* Only show transition for initial tooltip

GitOrigin-RevId: 74950ea7e705acb8f42dea552b23ce93c66058c7
This commit is contained in:
Alf Eaton
2025-10-09 08:05:49 +00:00
committed by Copybot
parent 3a8d383ac3
commit d3f05fda77
12 changed files with 106 additions and 29 deletions
@@ -0,0 +1,41 @@
import {
createContext,
Dispatch,
FC,
PropsWithChildren,
SetStateAction,
useContext,
useMemo,
useState,
} from 'react'
import useDebounce from '@/shared/hooks/use-debounce'
const TooltipContext = createContext<
| {
isTooltipOpen: boolean
setIsTooltipOpen: Dispatch<SetStateAction<boolean>>
}
| undefined
>(undefined)
export const TooltipProvider: FC<PropsWithChildren> = ({ children }) => {
const [isTooltipOpen, setIsTooltipOpen] = useState(false)
const debouncedIsTooltipOpen = useDebounce(isTooltipOpen, 100)
const value = useMemo(
() => ({
isTooltipOpen: debouncedIsTooltipOpen,
setIsTooltipOpen,
}),
[debouncedIsTooltipOpen, setIsTooltipOpen]
)
return (
<TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>
)
}
export const useTooltipContext = () => {
return useContext(TooltipContext)
}