@@ -2,32 +2,35 @@ import React from 'react';
22import { connect } from 'react-redux' ;
33import { CSSTransitionGroup } from 'react-transition-group' ;
44
5- import { showLoadingMessage , showErrorMessage , hideLoadingMessage , getErrorMessage } from './components/Store/Actions.js' ;
5+ import { showLoadingMessage , showErrorMessage , hideLoadingMessage } from './components/Store/Actions.js' ;
6+
7+ import { baseUrl } from './utils/baseUrl' ;
68
79import TopNavBar from './components/TopNavBar/TopNavBar' ;
810import Form from './components/Form/Form' ;
911import Tab from './components/Tab/Tab' ;
1012import MessageComp from './components/MessageComp/MessageComp' ;
11- import SettingsBar from './components/SettingsBar/SettingsBar' ;
13+ import TabPanel from './components/Tab/TabPanel/TabPanel' ;
14+ import Main from './components/Main/Main' ;
1215
1316import styles from './styles/App.scss' ;
1417import fade from './styles/transitions/fade.scss' ;
1518import scale from './styles/transitions/scale.scss' ;
1619
1720const mapStateToProps = state => {
1821 return {
19- showLoadingMessage : state . toggleLoadingMessage ,
20- showErrorMessage : state . toggleErrorMessage ,
21- errorMessage : state . toggleErrorMessage ,
22+ showLoadingMessage : state . loadingMessage . isLoading ,
23+ loadingMessage : state . loadingMessage . message ,
24+ showErrorMessage : state . errorMessage . hasError ,
25+ errorMessage : state . errorMessage . message
2226 }
2327}
2428
2529const mapDispatchToProps = dispatch => {
2630 return {
27- loadingMessageOn : ( ) => dispatch ( showLoadingMessage ( ) ) ,
31+ loadingMessageOn : message => dispatch ( showLoadingMessage ( message ) ) ,
2832 loadingMessageOff : ( ) => dispatch ( hideLoadingMessage ( ) ) ,
29- errorMessageOn : ( ) => dispatch ( showErrorMessage ( ) ) ,
30- getErrorMessage : message => dispatch ( getErrorMessage ( message ) ) ,
33+ errorMessageOn : message => dispatch ( showErrorMessage ( message ) ) ,
3134 }
3235}
3336
@@ -40,11 +43,13 @@ class App extends React.Component {
4043 parameter : '' ,
4144 fetchRequestStatus : undefined ,
4245 contracts : [ ] ,
43- settingsVisible : false ,
4446 }
4547
4648 this . handleMenuItemIconClick = this . handleMenuItemIconClick . bind ( this ) ;
47- this . handleOutsideClick = this . handleOutsideClick . bind ( this ) ;
49+ }
50+
51+ componentDidMount ( ) {
52+ this . fetchData ( baseUrl + 'solc/list' ) ;
4853 }
4954
5055 handleMenuItemIconClick ( index ) {
@@ -74,13 +79,14 @@ class App extends React.Component {
7479 settingsVisible : false ,
7580 } ) ;
7681
77- this . fetchData ( parameter ) ;
82+ const url = `http://localhost:9090/files/${ encodeURIComponent ( parameter ) || ' ' } ?extension=sol` ;
83+ this . fetchData ( url ) ;
7884 }
7985
80- fetchData ( parameter ) {
86+ fetchData ( url ) {
8187 this . handleRequestPending ( ) ;
8288
83- fetch ( `http://localhost:9090/files/ ${ encodeURIComponent ( parameter ) || ' ' } ?extension=sol` )
89+ fetch ( url )
8490 . then ( res => res . json ( ) )
8591 . then ( data => {
8692 data . error
@@ -92,68 +98,41 @@ class App extends React.Component {
9298 }
9399
94100 handleRequestPending ( ) {
95- this . props . loadingMessageOn ( ) ;
101+ this . props . loadingMessageOn ( 'Loading...' ) ;
96102 }
97103
98104 handleRequestSuccess ( response ) {
99- this . setState ( {
100- fetchRequestStatus : 'success' ,
101- contracts : response ,
102- } ) ;
105+
106+ if ( response . some ( item => item . version ) ) {
107+ this . setState ( {
108+ fetchRequestStatus : 'success' ,
109+ versions : response ,
110+ } ) ;
111+ } else {
112+ this . setState ( {
113+ fetchRequestStatus : 'success' ,
114+ contracts : response ,
115+ } ) ;
116+ }
103117
104118 this . props . loadingMessageOff ( ) ;
105119 }
106120
107121 handleRequestFail ( message ) {
108122 this . props . loadingMessageOff ( ) ;
109- this . props . errorMessageOn ( ) ;
110- this . props . getErrorMessage ( message ) ;
111- }
112-
113- handleSettingsiconClick ( ) {
114- this . toggleOutsideClick ( ) ;
115-
116- this . setState ( prevState => ( {
117- settingsVisible : ! prevState . settingsVisible ,
118- } ) )
119- }
120-
121- handleSettingsSaveButtonClick ( ) {
122- this . toggleOutsideClick ( ) ;
123-
124- this . setState ( {
125- settingsVisible : false ,
126- } ) ;
127- }
128-
129- toggleOutsideClick ( ) {
130- if ( ! this . state . settingsVisible ) {
131- document . addEventListener ( 'click' , this . handleOutsideClick ) ;
132- } else {
133- document . removeEventListener ( 'click' , this . handleOutsideClick ) ;
134- }
135- }
136-
137- handleOutsideClick ( e ) {
138- if ( this . node . contains ( e . target ) ) {
139- return ;
140- }
141-
142- document . removeEventListener ( 'click' , this . handleOutsideClick ) ;
143-
144- this . setState ( {
145- settingsVisible : false ,
146- } ) ;
123+ this . props . errorMessageOn ( message ) ;
147124 }
148125
149126 render ( ) {
150127
151- const { fetchRequestStatus, contracts, settingsVisible , configPlaceholder } = this . state ;
152- const { children , showLoadingMessage, showErrorMessage, errorMessage } = this . props ;
128+ const { fetchRequestStatus, contracts, versions } = this . state ;
129+ const { showLoadingMessage, showErrorMessage, errorMessage, loadingMessage } = this . props ;
153130
154131 return (
155132 < div className = { styles [ 'app' ] } >
156- < TopNavBar onIconClick = { ( ) => this . handleSettingsiconClick ( ) } >
133+ < TopNavBar
134+ fetchRequestStatus = { fetchRequestStatus }
135+ versions = { versions } >
157136 < Form
158137 submitButton = { true }
159138 inputTypes = { [ { name : 'contractsPath' , placeholder : 'Insert contracts path' } ] }
@@ -163,28 +142,22 @@ class App extends React.Component {
163142 onInputKeyUp = { ( ) => this . handleInputSubmit ( ) }
164143 />
165144 </ TopNavBar >
166- < div ref = { node => { this . node = node ; } } >
167- < SettingsBar
168- active = { ! ! settingsVisible }
169- onSaveButtonClick = { ( ) => this . handleSettingsSaveButtonClick ( ) }
170- />
171- </ div >
172145 < CSSTransitionGroup
173146 transitionName = { fade }
174147 transitionAppear = { true }
175148 transitionAppearTimeout = { 300 }
176- trnasitionEnterTimeout = { 300 }
149+ transitionEnterTimeout = { 300 }
177150 transitionLeaveTimeout = { 300 }
178151 >
179152 { showLoadingMessage &&
180- < MessageComp message = 'Loading...' />
153+ < MessageComp message = { loadingMessage } />
181154 }
182155 </ CSSTransitionGroup >
183156 < CSSTransitionGroup
184157 transitionName = { fade }
185158 transitionAppear = { true }
186159 transitionAppearTimeout = { 300 }
187- trnasitionEnterTimeout = { 300 }
160+ transitionEnterTimeout = { 300 }
188161 transitionLeaveTimeout = { 300 }
189162 >
190163 { showErrorMessage &&
@@ -199,12 +172,26 @@ class App extends React.Component {
199172 transitionName = { scale }
200173 transitionAppear = { true }
201174 transitionAppearTimeout = { 300 }
202- trnasitionEnterTimeout = { 300 }
175+ transitionEnterTimeout = { 300 }
203176 transitionLeaveTimeout = { 300 }
204177 >
205- { fetchRequestStatus === 'success' &&
206- < Tab data = { contracts } onMenuItemIconClick = { this . handleMenuItemIconClick } >
207- { children }
178+ { fetchRequestStatus === 'success' && contracts . length &&
179+ < Tab onMenuItemIconClick = { this . handleMenuItemIconClick } >
180+ { contracts . map ( ( item , i ) => {
181+ return (
182+ < TabPanel
183+ key = { `id--${ item . name } --${ i } ` }
184+ name = { item . name }
185+ >
186+ < Main
187+ name = { item . name }
188+ code = { item . code }
189+ path = { item . path }
190+ index = { i }
191+ />
192+ </ TabPanel >
193+ )
194+ } ) }
208195 </ Tab >
209196 }
210197 </ CSSTransitionGroup >
0 commit comments