From c37e0635338b91c117f14273b4ac5d8b9ea5dd3a Mon Sep 17 00:00:00 2001 From: huumanoid Date: Mon, 20 Mar 2017 15:45:07 +0300 Subject: [PATCH 1/3] Fix invalid tag Babel's react-jsx preset treats low-case tags as literal elements, not as a variables. So, for jsx: It generates js: React.createElement('wrapper') But we want: React.createElement(wrapper) Changing case of variable fixes the issue --- src/index.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index bc3c047c7..9a957d189 100644 --- a/src/index.js +++ b/src/index.js @@ -433,21 +433,21 @@ class ReactTooltip extends Component { {'type-light': this.state.type === 'light'} ) - let wrapper = ReactTooltip.supportedWrappers[this.props.wrapper] - if (!wrapper) wrapper = ReactTooltip.supportedWrappers['div'] + let Wrapper = ReactTooltip.supportedWrappers[this.props.wrapper] + if (!Wrapper) Wrapper = ReactTooltip.supportedWrappers['div'] if (html) { return ( - + dangerouslySetInnerHTML={{__html: placeholder}}/> ) } else { return ( - {placeholder} + data-id='tooltip'>{placeholder} ) } } From 3c85424c853f51b8295f081814f3eb59c2807695 Mon Sep 17 00:00:00 2001 From: huumanoid Date: Mon, 20 Mar 2017 15:48:13 +0300 Subject: [PATCH 2/3] Fix evaluated Wrapper type React.createElement expects string or React.Component in first argument. React.DOM.div and React.DOM.span are neither strings nor Components. They are wrappers around React.createElement. Also, they are deprecated. Read more: https://facebook.github.io/react/docs/react-api.html#createelement For our case, we could safely pass strings to React.createElement, so, no need to use React.DOM.div etc --- src/index.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index 9a957d189..2e91bbdad 100644 --- a/src/index.js +++ b/src/index.js @@ -58,10 +58,7 @@ class ReactTooltip extends Component { wrapper: 'div' }; - static supportedWrappers = { - 'div': React.DOM.div, - 'span': React.DOM.span - }; + static supportedWrappers = ['div', 'span']; constructor (props) { super(props) @@ -433,8 +430,10 @@ class ReactTooltip extends Component { {'type-light': this.state.type === 'light'} ) - let Wrapper = ReactTooltip.supportedWrappers[this.props.wrapper] - if (!Wrapper) Wrapper = ReactTooltip.supportedWrappers['div'] + let Wrapper = this.props.wrapper + if (ReactTooltip.supportedWrappers.indexOf(Wrapper) < 0) { + Wrapper = 'div' + } if (html) { return ( From 49fece0432b27875a22ad28e457d34e14accdad3 Mon Sep 17 00:00:00 2001 From: huumanoid Date: Mon, 20 Mar 2017 15:55:37 +0300 Subject: [PATCH 3/3] Respect defaultProps.wrapper value --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 2e91bbdad..4807e82b5 100644 --- a/src/index.js +++ b/src/index.js @@ -432,7 +432,7 @@ class ReactTooltip extends Component { let Wrapper = this.props.wrapper if (ReactTooltip.supportedWrappers.indexOf(Wrapper) < 0) { - Wrapper = 'div' + Wrapper = ReactTooltip.defaultProps.wrapper } if (html) {