@@ -3,41 +3,38 @@ import React, {
33 PropsWithChildren ,
44 useCallback ,
55 useContext ,
6- useId ,
76 useMemo ,
87 useState ,
98} from 'react'
109
11- import type {
12- AnchorRef ,
13- TooltipContextData ,
14- TooltipContextDataWrapper ,
15- } from './TooltipProviderTypes'
10+ import type { AnchorRef , TooltipContextData } from './TooltipProviderTypes'
11+
12+ const DEFAULT_TOOLTIP_ID = 'DEFAULT_TOOLTIP_ID'
1613
1714const defaultContextData : TooltipContextData = {
18- anchorRefs : new Set ( ) ,
19- activeAnchor : { current : null } ,
20- attach : ( ) => {
21- /* attach anchor element */
22- } ,
23- detach : ( ) => {
24- /* detach anchor element */
25- } ,
26- setActiveAnchor : ( ) => {
27- /* set active anchor */
28- } ,
15+ getTooltipData : ( ) => ( {
16+ anchorRefs : new Set ( ) ,
17+ activeAnchor : { current : null } ,
18+ attach : ( ) => {
19+ /* attach anchor element */
20+ } ,
21+ detach : ( ) => {
22+ /* detach anchor element */
23+ } ,
24+ setActiveAnchor : ( ) => {
25+ /* set active anchor */
26+ } ,
27+ } ) ,
2928}
3029
31- const defaultContextWrapper = Object . assign ( ( ) => defaultContextData , defaultContextData )
32- const TooltipContext = createContext < TooltipContextDataWrapper > ( defaultContextWrapper )
30+ const TooltipContext = createContext < TooltipContextData > ( defaultContextData )
3331
3432const TooltipProvider : React . FC < PropsWithChildren > = ( { children } ) => {
35- const defaultTooltipId = useId ( )
3633 const [ anchorRefMap , setAnchorRefMap ] = useState < Record < string , Set < AnchorRef > > > ( {
37- [ defaultTooltipId ] : new Set ( ) ,
34+ [ DEFAULT_TOOLTIP_ID ] : new Set ( ) ,
3835 } )
3936 const [ activeAnchorMap , setActiveAnchorMap ] = useState < Record < string , AnchorRef > > ( {
40- [ defaultTooltipId ] : { current : null } ,
37+ [ DEFAULT_TOOLTIP_ID ] : { current : null } ,
4138 } )
4239
4340 const attach = ( tooltipId : string , ...refs : AnchorRef [ ] ) => {
@@ -74,37 +71,27 @@ const TooltipProvider: React.FC<PropsWithChildren> = ({ children }) => {
7471 }
7572
7673 const getTooltipData = useCallback (
77- ( tooltipId ?: string ) => ( {
78- anchorRefs : anchorRefMap [ tooltipId ?? defaultTooltipId ] ?? new Set ( ) ,
79- activeAnchor : activeAnchorMap [ tooltipId ?? defaultTooltipId ] ?? { current : null } ,
80- attach : ( ...refs : AnchorRef [ ] ) => attach ( tooltipId ?? defaultTooltipId , ...refs ) ,
81- detach : ( ...refs : AnchorRef [ ] ) => detach ( tooltipId ?? defaultTooltipId , ...refs ) ,
82- setActiveAnchor : ( ref : AnchorRef ) => setActiveAnchor ( tooltipId ?? defaultTooltipId , ref ) ,
74+ ( tooltipId = DEFAULT_TOOLTIP_ID ) => ( {
75+ anchorRefs : anchorRefMap [ tooltipId ] ?? new Set ( ) ,
76+ activeAnchor : activeAnchorMap [ tooltipId ] ?? { current : null } ,
77+ attach : ( ...refs : AnchorRef [ ] ) => attach ( tooltipId , ...refs ) ,
78+ detach : ( ...refs : AnchorRef [ ] ) => detach ( tooltipId , ...refs ) ,
79+ setActiveAnchor : ( ref : AnchorRef ) => setActiveAnchor ( tooltipId , ref ) ,
8380 } ) ,
84- [ defaultTooltipId , anchorRefMap , activeAnchorMap , attach , detach ] ,
81+ [ anchorRefMap , activeAnchorMap , attach , detach ] ,
8582 )
8683
8784 const context = useMemo ( ( ) => {
88- const contextData : TooltipContextData = getTooltipData ( defaultTooltipId )
89- const contextWrapper = Object . assign (
90- ( tooltipId ?: string ) => getTooltipData ( tooltipId ) ,
91- contextData ,
92- )
93- return contextWrapper
85+ return {
86+ getTooltipData,
87+ }
9488 } , [ getTooltipData ] )
9589
9690 return < TooltipContext . Provider value = { context } > { children } </ TooltipContext . Provider >
9791}
9892
99- /*
100- // this will use the "global" tooltip (same as `useTooltip()()`)
101- const { anchorRefs, attach, detach } = useTooltip()
102-
103- // this will use the tooltip with id `tooltip-id`
104- const { anchorRefs, attach, detach } = useTooltip()('tooltip-id')
105- */
106- export function useTooltip ( ) {
107- return useContext ( TooltipContext )
93+ export function useTooltip ( tooltipId = DEFAULT_TOOLTIP_ID ) {
94+ return useContext ( TooltipContext ) . getTooltipData ( tooltipId )
10895}
10996
11097export default TooltipProvider
0 commit comments