Handle use cases that were failing

1) hanlde case when temp.sol doesn’t exist
2) delete all code - shouldn’t return last fiddle
3) Switch to different tab (ie contracts) then back to fiddle - fiddle should now remain.
This commit is contained in:
emizzle 2018-08-28 23:52:00 +10:00 committed by Pascal Precht
parent 68957f5dc8
commit cd176a5f95
No known key found for this signature in database
GPG Key ID: 0EE28D8D6FD85D7D
3 changed files with 40 additions and 13 deletions

View File

@ -171,7 +171,9 @@ export const ensRecords = {
export const FIDDLE = createRequestTypes('FIDDLE');
export const fiddle = {
post: (codeToCompile) => action(FIDDLE[REQUEST], {codeToCompile}),
success: (fiddle) => action(FIDDLE[SUCCESS], {fiddles: [fiddle]}),
success: (fiddle) => {
return action(FIDDLE[SUCCESS], {fiddles: [fiddle]});
},
failure: (error) => action(FIDDLE[FAILURE], {error})
};
@ -191,6 +193,10 @@ export const fiddleFile = {
failure: (error) => action(FIDDLE_FILE[FAILURE], {error})
};
export const putLastFiddle = (lastFiddleValue) => {
return ({ type: FIDDLE_FILE[SUCCESS], fiddleFiles: [{source: lastFiddleValue, filename: 'temp'}] });
};
// Web Socket
export const WATCH_NEW_PROCESS_LOGS = 'WATCH_NEW_PROCESS_LOGS';
export const WATCH_NEW_CONTRACT_LOGS = 'WATCH_NEW_CONTRACT_LOGS';

View File

@ -3,7 +3,12 @@
import React, {Component} from 'react';
import {connect} from 'react-redux';
import PropTypes from 'prop-types';
import {fiddle as fiddleAction, fiddleDeploy as fiddleDeployAction, fiddleFile as fiddleFileAction} from '../actions';
import {
fiddle as fiddleAction,
fiddleDeploy as fiddleDeployAction,
fiddleFile as fiddleFileAction,
putLastFiddle as putLastFiddleAction
} from '../actions';
import Fiddle from '../components/Fiddle';
import FiddleResults from '../components/FiddleResults';
import FiddleResultsSummary from '../components/FiddleResultsSummary';
@ -16,8 +21,9 @@ class FiddleContainer extends Component {
constructor(props) {
super(props);
this.state = {
value: '',
loadingMessage: ''
value: undefined,
loadingMessage: 'Loading...',
readOnly: true
};
this.compileTimeout = null;
this.ace = null;
@ -25,21 +31,32 @@ class FiddleContainer extends Component {
}
componentDidMount() {
this.setState({loadingMessage: 'Loading saved state...'});
this.props.fetchLastFiddle();
}
componentDidUpdate(prevProps){
if(this.props.lastFiddle && (prevProps.lastFiddle !== this.props.lastFiddle)){
if(this.props.lastFiddle && //!(this.props.fiddle && this.state.value === '') &&
(
(prevProps.lastFiddle !== this.props.lastFiddle)
)
)
{
this._onCodeChange(this.props.lastFiddle);
}
}
componentWillUnmount(){
//this.props.fetchLastFiddle();
this.props.putLastFiddle(this.state.value); // force update on next load
}
_onCodeChange(newValue) {
this.setState({value: newValue});
this.setState({readOnly: false, value: newValue});
if (this.compileTimeout) clearTimeout(this.compileTimeout);
this.compileTimeout = setTimeout(() => {
this.setState({loadingMessage: 'Compiling...'});
this.props.postFiddle(newValue);
//this.props.putLastFiddle(newValue);
}, 1000);
}
@ -93,7 +110,7 @@ class FiddleContainer extends Component {
render() {
const {fiddle, loading, fiddleError, fiddleDeployError, deployedContracts, lastFiddle} = this.props;
const {loadingMessage} = this.state;
const {loadingMessage, value, readOnly} = this.state;
let renderings = [];
let warnings = [];
let errors = [];
@ -114,7 +131,9 @@ class FiddleContainer extends Component {
onDeployClick={(e) => this._onDeployClick(e)}
/>
<Fiddle
value={this.state.value || lastFiddle}
// value={fiddle ? this.state.value : lastFiddle}
value={value !== undefined ? value : lastFiddle}
readOnly={readOnly}
onCodeChange={(n) => this._onCodeChange(n)}
errors={errors}
warnings={warnings}
@ -158,7 +177,7 @@ function mapStateToProps(state) {
deployedContracts: deployedFiddle.data,
fiddleError: fiddle.error,
fiddleDeployError: deployedFiddle.error,
lastFiddle: lastFiddle ? lastFiddle.source : '',
lastFiddle: (lastFiddle && lastFiddle.source && !lastFiddle.source.error) ? lastFiddle.source : undefined,
loading: state.loading
};
}
@ -172,7 +191,8 @@ FiddleContainer.propTypes = {
postFiddleDeploy: PropTypes.func,
deployedContracts: PropTypes.string,
fetchLastFiddle: PropTypes.func,
lastFiddle: PropTypes.string
lastFiddle: PropTypes.string,
putLastFiddle: PropTypes.func
};
export default connect(
@ -180,6 +200,7 @@ export default connect(
{
postFiddle: fiddleAction.post,
postFiddleDeploy: fiddleDeployAction.post,
fetchLastFiddle: fiddleFileAction.request
fetchLastFiddle: fiddleFileAction.request,
putLastFiddle: putLastFiddleAction
},
)(FiddleContainer);

View File

@ -138,7 +138,7 @@ class Solidity {
return callback(new Error(__("error compiling for unknown reasons")));
}
if (Object.keys(output.contracts).length === 0 && output.sourceList.length > 0) {
if (Object.keys(output.contracts).length === 0 && output.sourceList && output.sourceList.length > 0) {
return callback(new Error(__("error compiling. There are sources available but no code could be compiled, likely due to fatal errors in the solidity code")).message);
}