/ embark-ui / src / components / ContractLayout.js
ContractLayout.js
 1  import PropTypes from "prop-types";
 2  import React from 'react';
 3  import { TabContent, TabPane, Nav, NavItem, NavLink, Card, CardBody, CardTitle } from 'reactstrap';
 4  import classnames from 'classnames';
 5  
 6  import ContractDetail from '../components/ContractDetail';
 7  import ContractTransactionsContainer from '../containers/ContractTransactionsContainer';
 8  import ContractOverviewContainer from '../containers/ContractOverviewContainer';
 9  import ContractDebuggerContainer from '../containers/ContractDebuggerContainer';
10  
11  class ContractLayout extends React.Component {
12    constructor(props) {
13      super(props);
14  
15      this.state = {
16        activeTab: '1'
17      };
18    }
19  
20    toggle(tab) {
21      if (this.state.activeTab !== tab) {
22        this.setState({
23          activeTab: tab
24        });
25      }
26    }
27  
28    render() {
29      return (
30        <React.Fragment>
31          <Card>
32            <CardBody>
33              <CardTitle>{this.props.contract.className}</CardTitle>
34              <Nav tabs>
35                <NavItem>
36                  <NavLink
37                    className={classnames({ active: this.state.activeTab === '1' })}
38                    onClick={() => { this.toggle('1'); }}
39                  >
40                    Overview
41                  </NavLink>
42                </NavItem>
43                <NavItem>
44                  <NavLink
45                    className={classnames({ active: this.state.activeTab === '2' })}
46                    onClick={() => { this.toggle('2'); }}
47                  >
48                    Detail
49                  </NavLink>
50                </NavItem>
51                <NavItem>
52                  <NavLink
53                    className={classnames({ active: this.state.activeTab === '3' })}
54                    onClick={() => { this.toggle('3'); }}
55                  >
56                    Transactions
57                  </NavLink>
58                </NavItem>
59                <NavItem>
60                  <NavLink
61                    className={classnames({ active: this.state.activeTab === '4' })}
62                    onClick={() => { this.toggle('4'); }}
63                  >
64                    Debugger
65                  </NavLink>
66                </NavItem>
67              </Nav>
68              <TabContent activeTab={this.state.activeTab}>
69                <TabPane tabId="1">
70                  <ContractOverviewContainer contract={this.props.contract} />
71                </TabPane>
72                <TabPane tabId="2">
73                  <ContractDetail contract={this.props.contract} />
74                </TabPane>
75                <TabPane tabId="3">
76                  <ContractTransactionsContainer contract={this.props.contract} />
77                </TabPane>
78                <TabPane tabId="4">
79                  <ContractDebuggerContainer contract={this.props.contract} />
80                </TabPane>
81              </TabContent>
82            </CardBody>
83          </Card>
84        </React.Fragment>
85      )
86    }
87  }
88  
89  ContractLayout.propTypes = {
90    contract: PropTypes.object
91  };
92  
93  export default ContractLayout;