Skip to content

Commit e11edc6

Browse files
use span as wrapper instead of cloning anchor
1 parent 786492b commit e11edc6

File tree

2 files changed

+19
-54
lines changed

2 files changed

+19
-54
lines changed

src/App.tsx

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { TooltipController as Tooltip } from 'components/TooltipController'
22
import { TooltipProvider, TooltipWrapper } from 'components/TooltipProvider'
3-
import { useEffect, useRef, useState } from 'react'
3+
import { useState } from 'react'
44
import styles from './styles.module.css'
55

66
function WithProviderMinimal() {
@@ -36,35 +36,6 @@ function WithProviderMultiple() {
3636
)
3737
}
3838

39-
function WithProviderForwardRef() {
40-
// if access to the element's ref is needed, `TooltipWrapper.forwardRef` must be used
41-
const ref = useRef<HTMLButtonElement>(null)
42-
43-
useEffect(() => {
44-
// eslint-disable-next-line no-console
45-
console.log('Ref can still be accessed: ', ref.current)
46-
})
47-
48-
return (
49-
<section style={{ marginTop: '100px' }}>
50-
<p>
51-
<TooltipWrapper forwardRef={ref} place="bottom" content="Shared Global Tooltip">
52-
<button
53-
// this will not work, must use `forwardRef` from wrapper
54-
ref={ref}
55-
>
56-
Forward ref 1
57-
</button>
58-
</TooltipWrapper>
59-
<TooltipWrapper place="right" content="Shared Global Tooltip">
60-
<button>Forward ref 2</button>
61-
</TooltipWrapper>
62-
</p>
63-
<Tooltip />
64-
</section>
65-
)
66-
}
67-
6839
function App() {
6940
const [anchorId, setAnchorId] = useState('button')
7041
const [isDarkOpen, setIsDarkOpen] = useState(false)
@@ -141,9 +112,6 @@ function App() {
141112
<TooltipProvider>
142113
<WithProviderMultiple />
143114
</TooltipProvider>
144-
<TooltipProvider>
145-
<WithProviderForwardRef />
146-
</TooltipProvider>
147115
</main>
148116
)
149117
}
Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import React, { useEffect, useRef } from 'react'
1+
import { useEffect, useRef } from 'react'
22
import { useTooltip } from './TooltipProvider'
33
import type { ITooltipWrapper } from './TooltipProviderTypes'
44

55
const TooltipWrapper = ({
66
tooltipId,
7-
forwardRef,
87
children,
98
place,
109
content,
@@ -27,25 +26,23 @@ const TooltipWrapper = ({
2726
}
2827
}, [])
2928

30-
return React.cloneElement(children, {
31-
ref: (ref: HTMLElement) => {
32-
anchorRef.current = ref
33-
if (forwardRef) {
34-
// eslint-disable-next-line no-param-reassign
35-
forwardRef.current = ref
36-
}
37-
},
38-
'data-tooltip-place': place,
39-
'data-tooltip-content': content,
40-
'data-tooltip-html': html,
41-
'data-tooltip-variant': variant,
42-
'data-tooltip-offset': offset,
43-
'data-tooltip-wrapper': wrapper,
44-
'data-tooltip-events': events,
45-
'data-tooltip-position-strategy': positionStrategy,
46-
'data-tooltip-delay-show': delayShow,
47-
'data-tooltip-delay-hide': delayHide,
48-
})
29+
return (
30+
<span
31+
ref={anchorRef}
32+
data-tooltip-place={place}
33+
data-tooltip-content={content}
34+
data-tooltip-html={html}
35+
data-tooltip-variant={variant}
36+
data-tooltip-offset={offset}
37+
data-tooltip-wrapper={wrapper}
38+
data-tooltip-events={events}
39+
data-tooltip-position-strategy={positionStrategy}
40+
data-tooltip-delay-show={delayShow}
41+
data-tooltip-delay-hide={delayHide}
42+
>
43+
{children}
44+
</span>
45+
)
4946
}
5047

5148
export default TooltipWrapper

0 commit comments

Comments
 (0)