1 import React from 'react';
2 import ReactDOM from 'react-dom';
3 import Tabs from 'react-bootstrap/lib/Tabs.js';
4 import Overlay from 'react-bootstrap/lib/Overlay.js';
5 import Tooltip from 'react-bootstrap/lib/Tooltip.js';
7 import i18n from 'nfvo-utils/i18n/i18n.js';
10 class ValidationTab extends React.Component {
13 children: React.PropTypes.node
21 const {invalidTabs} = this.state;
22 return React.cloneElement(
25 key: element.props.eventKey,
26 tabClassName: invalidTabs.indexOf(element.props.eventKey) > -1 ? 'invalid-tab' : 'valid-tab',
27 onValidationStateChange: (eventKey, isValid) => this.validTabStateChanged(eventKey, isValid)
32 validTabStateChanged(eventKey, isValid) {
33 let {invalidTabs} = this.state;
34 let invalidTabIndex = invalidTabs.indexOf(eventKey);
35 if (isValid && invalidTabIndex > -1) {
36 this.setState({invalidTabs: invalidTabs.filter(otherEventKey => eventKey !== otherEventKey)});
37 } else if (!isValid && invalidTabIndex === -1) {
38 this.setState({invalidTabs: [...invalidTabs, eventKey]});
43 const {invalidTabs} = this.state;
44 return invalidTabs.length > 0 && (invalidTabs.length > 1 || invalidTabs[0] !== this.props.activeKey);
50 <Tabs {...this.props} ref='tabsList'>
51 {this.props.children.map(element => this.cloneTab(element))}
55 show={this.showTabsError()}
58 let target = ReactDOM.findDOMNode(this.refs.tabsList).querySelector('ul > li.invalid-tab:not(.active):nth-of-type(n)');
59 return target && target.offsetParent ? target : undefined;
64 id='error-some-tabs-contain-errors'
65 className='validation-error-message'>
66 {i18n('One or more tabs are invalid')}