@@ -176,29 +176,35 @@ class ReactTooltip extends React.Component {
176
176
177
177
/* Look for the closest DOM root having tooltip and inject styles. */
178
178
injectStyles ( ) {
179
- const { id } = this . props ;
180
- const targetArray = this . getTargetArray ( id ) ;
181
- const domRoots = [ ] ;
182
- targetArray . forEach ( target => {
183
- let parentNode = target . parentNode ;
184
- while ( parentNode . parentNode && ! parentNode . host ) {
185
- parentNode = parentNode . parentNode ;
186
- }
187
- const head = parentNode . querySelector ( 'head' ) ;
188
- domRoots . push ( head || parentNode ) ;
189
- } ) ;
190
- if ( domRoots . length ) {
179
+ const { tooltipRef } = this ;
180
+ if ( ! tooltipRef ) {
181
+ return ;
182
+ }
183
+
184
+ let parentNode = tooltipRef . parentNode ;
185
+ while ( parentNode . parentNode ) {
186
+ parentNode = parentNode . parentNode ;
187
+ }
188
+
189
+ let domRoot ;
190
+
191
+ switch ( parentNode . constructor . name ) {
192
+ case 'HTMLDocument' :
193
+ domRoot = parentNode . head ;
194
+ break ;
195
+ case 'ShadowRoot' :
196
+ default :
197
+ domRoot = parentNode ;
198
+ break ;
199
+ }
200
+
201
+ // Prevent styles duplication.
202
+ if ( ! domRoot . querySelector ( 'style[data-react-tooltip]' ) ) {
191
203
const style = document . createElement ( 'style' ) ;
192
204
style . textContent = baseCss ;
193
205
style . setAttribute ( 'data-react-tooltip' , 'true' ) ;
194
- domRoots
195
- . filter ( ( item , idx , src ) => src . indexOf ( item ) === idx )
196
- . forEach ( domRoot => {
197
- // Prevent styles duplication.
198
- if ( ! domRoot . querySelector ( 'style[data-react-tooltip]' ) ) {
199
- domRoot . appendChild ( style ) ;
200
- }
201
- } ) ;
206
+
207
+ domRoot . appendChild ( style ) ;
202
208
}
203
209
}
204
210
0 commit comments