@@ -22,18 +22,24 @@ function isTabDisabled(node) {
2222}
2323
2424let canUseActiveElement ;
25- try {
26- canUseActiveElement = ! ! (
27- typeof window !== 'undefined' &&
28- window . document &&
29- window . document . activeElement
30- ) ;
31- } catch ( e ) {
32- // Work around for IE bug when accessing document.activeElement in an iframe
33- // Refer to the following resources:
34- // http://stackoverflow.com/a/10982960/369687
35- // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12733599
36- canUseActiveElement = false ;
25+
26+ function determineCanUseActiveElement ( environment ) {
27+ const env =
28+ environment || ( typeof window !== 'undefined' ? window : undefined ) ;
29+
30+ try {
31+ canUseActiveElement = ! ! (
32+ typeof env !== 'undefined' &&
33+ env . document &&
34+ env . document . activeElement
35+ ) ;
36+ } catch ( e ) {
37+ // Work around for IE bug when accessing document.activeElement in an iframe
38+ // Refer to the following resources:
39+ // http://stackoverflow.com/a/10982960/369687
40+ // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12733599
41+ canUseActiveElement = false ;
42+ }
3743}
3844export default class UncontrolledTabs extends Component {
3945 static defaultProps = {
@@ -57,6 +63,7 @@ export default class UncontrolledTabs extends Component {
5763 selectedIndex : PropTypes . number . isRequired ,
5864 selectedTabClassName : PropTypes . string ,
5965 selectedTabPanelClassName : PropTypes . string ,
66+ environment : PropTypes . object ,
6067 } ;
6168
6269 tabNodes = [ ] ;
@@ -164,6 +171,7 @@ export default class UncontrolledTabs extends Component {
164171 selectedIndex,
165172 selectedTabClassName,
166173 selectedTabPanelClassName,
174+ environment,
167175 } = this . props ;
168176
169177 this . tabIds = this . tabIds || [ ] ;
@@ -190,10 +198,19 @@ export default class UncontrolledTabs extends Component {
190198 // If it is we should keep the focus on the next selected tab
191199 let wasTabFocused = false ;
192200
201+ if ( canUseActiveElement == null ) {
202+ determineCanUseActiveElement ( environment ) ;
203+ }
204+
193205 if ( canUseActiveElement ) {
194206 wasTabFocused = React . Children . toArray ( child . props . children )
195207 . filter ( isTab )
196- . some ( ( tab , i ) => document . activeElement === this . getTab ( i ) ) ;
208+ . some ( ( tab , i ) => {
209+ const env =
210+ environment ||
211+ ( typeof window !== 'undefined' ? window : undefined ) ;
212+ return env && env . document . activeElement === this . getTab ( i ) ;
213+ } ) ;
197214 }
198215
199216 result = cloneElement ( child , {
@@ -350,6 +367,7 @@ export default class UncontrolledTabs extends Component {
350367 selectedIndex, // unused
351368 selectedTabClassName, // unused
352369 selectedTabPanelClassName, // unused
370+ environment, // unused
353371 ...attributes
354372 } = this . props ;
355373
0 commit comments