Skip to content
This repository was archived by the owner on Nov 9, 2024. It is now read-only.

Commit 237ba6e

Browse files
committed
use findDOMNode() for reference; fix #3
1 parent 39eaf15 commit 237ba6e

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

src/Tippy.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import React from 'react'
2-
import tippy from 'tippy.js'
2+
import ReactDOM from 'react-dom'
33
import PropTypes from 'prop-types'
4+
import tippy from 'tippy.js'
45

56
const getNativeTippyProps = props => {
67
const { children, onCreate, ...tippyProps } = props
78
return tippyProps
89
}
910

1011
class Tippy extends React.Component {
11-
reference = React.createRef()
1212
content = React.createRef()
1313

1414
static propTypes = {
@@ -24,7 +24,7 @@ class Tippy extends React.Component {
2424
}
2525

2626
componentDidMount() {
27-
this.tip = tippy.one(this.reference.current, {
27+
this.tip = tippy.one(ReactDOM.findDOMNode(this), {
2828
...getNativeTippyProps(this.props),
2929
content: this.getContent()
3030
})
@@ -46,13 +46,11 @@ class Tippy extends React.Component {
4646
}
4747

4848
render() {
49-
const { children, content } = this.props
50-
5149
return (
5250
<React.Fragment>
53-
{React.cloneElement(children, { ref: this.reference })}
54-
{React.isValidElement(content) && (
55-
<div ref={this.content}>{content}</div>
51+
{this.props.children}
52+
{React.isValidElement(this.props.content) && (
53+
<div ref={this.content}>{this.props.content}</div>
5654
)}
5755
</React.Fragment>
5856
)

test/Tippy.test.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import React from 'react'
22
import Tippy from '../src/Tippy'
3-
import { shallow, mount } from 'enzyme'
3+
import { mount } from 'enzyme'
44

55
describe('<Tippy />', () => {
66
test('renders only the child element', () => {
7-
const wrapper = shallow(
7+
const wrapper = mount(
88
<Tippy content="tooltip">
99
<button />
1010
</Tippy>
@@ -98,4 +98,28 @@ describe('<Tippy />', () => {
9898
done()
9999
})
100100
})
101+
102+
test('component as a child', () => {
103+
const withForwardRef = Comp => {
104+
return React.forwardRef((props, ref) => (
105+
<Comp {...props} forwardRef={ref} />
106+
))
107+
}
108+
const Button = withForwardRef(
109+
class extends React.Component {
110+
render() {
111+
return <button ref={this.props.forwardRef}>My button</button>
112+
}
113+
}
114+
)
115+
const wrapper = mount(
116+
<div>
117+
<Tippy content="tooltip">
118+
<Button />
119+
</Tippy>
120+
</div>
121+
)
122+
expect(wrapper.find(Tippy).getDOMNode()._tippy).toBeDefined()
123+
wrapper.unmount()
124+
})
101125
})

0 commit comments

Comments
 (0)