mirror of https://github.com/embarklabs/embark.git
display contract profile
This commit is contained in:
parent
eb3bf4a6ba
commit
9c4ecbdfd6
|
@ -126,16 +126,17 @@ export function initBlockHeader(){
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function fetchContractProfile() {
|
export function fetchContractProfile(contractName) {
|
||||||
return {
|
return {
|
||||||
type: FETCH_CONTRACT_PROFILE
|
type: FETCH_CONTRACT_PROFILE,
|
||||||
|
contractName
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function receiveContractProfile(profile) {
|
export function receiveContractProfile(contractProfile) {
|
||||||
return {
|
return {
|
||||||
type: RECEIVE_CONTRACT_PROFILE,
|
type: RECEIVE_CONTRACT_PROFILE,
|
||||||
profile
|
contractProfile
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,5 +76,7 @@ export function fetchContracts() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function fetchContractProfile(contractName) {
|
export function fetchContractProfile(contractName) {
|
||||||
|
console.dir("api: fetchContractProfile");
|
||||||
|
console.dir(contractName);
|
||||||
return axios.get('http://localhost:8000/embark-api/profiler/' + contractName);
|
return axios.get('http://localhost:8000/embark-api/profiler/' + contractName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ import {
|
||||||
|
|
||||||
import ContractContainer from '../containers/ContractContainer';
|
import ContractContainer from '../containers/ContractContainer';
|
||||||
|
|
||||||
const ContractLayout = () => (
|
const ContractLayout = (props) => (
|
||||||
<Grid.Row>
|
<Grid.Row>
|
||||||
<Grid.Col md={3}>
|
<Grid.Col md={3}>
|
||||||
<Page.Title className="my-5">Contract</Page.Title>
|
<Page.Title className="my-5">Contract</Page.Title>
|
||||||
|
@ -40,7 +40,7 @@ const ContractLayout = () => (
|
||||||
</List.GroupItem>
|
</List.GroupItem>
|
||||||
<List.GroupItem
|
<List.GroupItem
|
||||||
className="d-flex align-items-center"
|
className="d-flex align-items-center"
|
||||||
to={withRouter(ContractContainer)}
|
to={`/embark/contracts/${props.match.params.contractName}/profiler`}
|
||||||
icon="server"
|
icon="server"
|
||||||
RootComponent={withRouter(NavLink)}
|
RootComponent={withRouter(NavLink)}
|
||||||
>
|
>
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
import React from 'react';
|
||||||
|
import {Link} from 'react-router-dom';
|
||||||
|
|
||||||
|
const ContractProfile = ({contract}) => (
|
||||||
|
<React.Fragment>
|
||||||
|
<h1>Profile for {contract.name}</h1>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Function</th>
|
||||||
|
<th>Payable</th>
|
||||||
|
<th>Mutability</th>
|
||||||
|
<th>Inputs</th>
|
||||||
|
<th>Ouputs</th>
|
||||||
|
<th>Gas Estimates</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{contract.methods.map((method) => {
|
||||||
|
return (
|
||||||
|
<tr>
|
||||||
|
<td>{method.name}</td>
|
||||||
|
<td>{(method.payable == true).toString()}</td>
|
||||||
|
<td>{method.mutability}</td>
|
||||||
|
<td>({method.inputs.map((x) => x.type).join(',')})</td>
|
||||||
|
<td>({method.outputs.map((x) => x.type).join(',')})</td>
|
||||||
|
<td>{method.gasEstimates}</td>
|
||||||
|
</tr>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default ContractProfile;
|
||||||
|
|
|
@ -7,12 +7,6 @@ import { withRouter } from 'react-router'
|
||||||
|
|
||||||
class ContractContainer extends Component {
|
class ContractContainer extends Component {
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
console.dir("----");
|
|
||||||
console.dir(this.props);
|
|
||||||
//console.dir(this.state);
|
|
||||||
//console.dir(this.props.match.params.contractName);
|
|
||||||
//console.dir(this.props.match.params.contractName);
|
|
||||||
//console.dir(this.props.fetchContract.toString());
|
|
||||||
this.props.fetchContract(this.props.match.params.contractName);
|
this.props.fetchContract(this.props.match.params.contractName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,8 +40,6 @@ class ContractContainer extends Component {
|
||||||
};
|
};
|
||||||
|
|
||||||
function mapStateToProps(state) {
|
function mapStateToProps(state) {
|
||||||
console.dir("---->>>>>");
|
|
||||||
console.dir(arguments);
|
|
||||||
return { contract: state.contract }
|
return { contract: state.contract }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
import React, { Component } from 'react';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
import { compose } from 'redux';
|
||||||
|
import { fetchContractProfile } from '../actions';
|
||||||
|
import ContractProfile from '../components/ContractProfile';
|
||||||
|
import { withRouter } from 'react-router'
|
||||||
|
|
||||||
|
class ContractProfileContainer extends Component {
|
||||||
|
componentWillMount() {
|
||||||
|
this.props.fetchContractProfile(this.props.match.params.contractName);
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
console.dir("||======>");
|
||||||
|
console.dir(this.props);
|
||||||
|
console.dir("||======>");
|
||||||
|
//const { contract } = this.props;
|
||||||
|
const contract = this.props.contractProfile;
|
||||||
|
if (!contract.data) {
|
||||||
|
return (
|
||||||
|
<h1>
|
||||||
|
<i>Loading contract...</i>
|
||||||
|
</h1>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contract.error) {
|
||||||
|
return (
|
||||||
|
<h1>
|
||||||
|
<i>Error API...</i>
|
||||||
|
</h1>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.dir(contract);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ContractProfile contract={contract.data} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function mapStateToProps(state) {
|
||||||
|
console.dir("-----------");
|
||||||
|
console.dir("-----------");
|
||||||
|
console.dir(state);
|
||||||
|
console.dir("-----------");
|
||||||
|
console.dir("-----------");
|
||||||
|
return { contractProfile: state.contractProfile }
|
||||||
|
}
|
||||||
|
|
||||||
|
export default compose(
|
||||||
|
connect(
|
||||||
|
mapStateToProps,
|
||||||
|
{ fetchContractProfile }
|
||||||
|
),
|
||||||
|
withRouter
|
||||||
|
)(ContractProfileContainer)
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
import {RECEIVE_CONTRACT_PROFILE, RECEIVE_CONTRACT_PROFILE_ERROR} from "../actions";
|
||||||
|
|
||||||
|
export default function contractProfile(state = {}, action) {
|
||||||
|
console.dir("** reducer contract profile");
|
||||||
|
console.dir(arguments);
|
||||||
|
switch (action.type) {
|
||||||
|
case RECEIVE_CONTRACT_PROFILE:
|
||||||
|
return Object.assign({}, state, {data: action.contractProfile.data});
|
||||||
|
case RECEIVE_CONTRACT_PROFILE_ERROR:
|
||||||
|
return Object.assign({}, state, {error: true});
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,12 +6,14 @@ import transactionsReducer from './transactionsReducer';
|
||||||
import commandsReducer from './commandsReducer';
|
import commandsReducer from './commandsReducer';
|
||||||
import contractsReducer from './contractsReducer';
|
import contractsReducer from './contractsReducer';
|
||||||
import contractReducer from './contractReducer';
|
import contractReducer from './contractReducer';
|
||||||
|
import contractProfileReducer from './contractProfileReducer';
|
||||||
|
|
||||||
const rootReducer = combineReducers({
|
const rootReducer = combineReducers({
|
||||||
accounts: accountsReducer,
|
accounts: accountsReducer,
|
||||||
processes: processesReducer,
|
processes: processesReducer,
|
||||||
contracts: contractsReducer,
|
contracts: contractsReducer,
|
||||||
contract: contractReducer,
|
contract: contractReducer,
|
||||||
|
contractProfile: contractProfileReducer,
|
||||||
blocks: blocksReducer,
|
blocks: blocksReducer,
|
||||||
transactions: transactionsReducer,
|
transactions: transactionsReducer,
|
||||||
commands: commandsReducer,
|
commands: commandsReducer,
|
||||||
|
|
|
@ -5,6 +5,7 @@ import HomeContainer from './containers/HomeContainer';
|
||||||
import AccountsContainer from './containers/AccountsContainer';
|
import AccountsContainer from './containers/AccountsContainer';
|
||||||
import ContractsContainer from './containers/ContractsContainer';
|
import ContractsContainer from './containers/ContractsContainer';
|
||||||
import ContractContainer from './containers/ContractContainer';
|
import ContractContainer from './containers/ContractContainer';
|
||||||
|
import ContractProfileContainer from './containers/ContractProfileContainer';
|
||||||
import NoMatch from './components/NoMatch';
|
import NoMatch from './components/NoMatch';
|
||||||
import ExplorerLayout from './components/ExplorerLayout';
|
import ExplorerLayout from './components/ExplorerLayout';
|
||||||
import ProcessesLayout from './components/ProcessesLayout';
|
import ProcessesLayout from './components/ProcessesLayout';
|
||||||
|
@ -18,6 +19,7 @@ const routes = (
|
||||||
<Route path="/embark/processes/" component={ProcessesLayout} />
|
<Route path="/embark/processes/" component={ProcessesLayout} />
|
||||||
<Route path="/embark/explorer/accounts" component={AccountsContainer} />
|
<Route path="/embark/explorer/accounts" component={AccountsContainer} />
|
||||||
<Route path="/embark/processes" component={ProcessesContainer} />
|
<Route path="/embark/processes" component={ProcessesContainer} />
|
||||||
|
<Route path="/embark/contracts/:contractName/profiler" component={ContractProfileContainer} />
|
||||||
<Route path="/embark/contracts/:contractName" component={ContractLayout} />
|
<Route path="/embark/contracts/:contractName" component={ContractLayout} />
|
||||||
<Route path="/embark/contracts" component={ContractsContainer} />
|
<Route path="/embark/contracts" component={ContractsContainer} />
|
||||||
<Route component={NoMatch} />
|
<Route component={NoMatch} />
|
||||||
|
|
|
@ -121,6 +121,9 @@ export default function *root() {
|
||||||
fork(watchFetchBlocks),
|
fork(watchFetchBlocks),
|
||||||
fork(watchFetchContracts),
|
fork(watchFetchContracts),
|
||||||
fork(watchFetchContract),
|
fork(watchFetchContract),
|
||||||
|
fork(watchFetchTransaction),
|
||||||
|
fork(watchFetchContractProfile),
|
||||||
|
fork(watchFetchTransactions)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -153,3 +156,21 @@ export function *fetchContracts() {
|
||||||
export function *watchFetchContracts() {
|
export function *watchFetchContracts() {
|
||||||
yield takeEvery(actions.FETCH_CONTRACTS, fetchContracts);
|
yield takeEvery(actions.FETCH_CONTRACTS, fetchContracts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function *fetchContractProfile(action) {
|
||||||
|
console.dir("** fetchContractProfile");
|
||||||
|
console.dir(action);
|
||||||
|
try {
|
||||||
|
const profile = yield call(api.fetchContractProfile, action.contractName);
|
||||||
|
yield put(actions.receiveContractProfile(profile));
|
||||||
|
} catch (e) {
|
||||||
|
console.dir(e);
|
||||||
|
yield put(actions.receiveContractError());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function *watchFetchContractProfile() {
|
||||||
|
console.dir("** watchFetchContractProfile");
|
||||||
|
yield takeEvery(actions.FETCH_CONTRACT_PROFILE, fetchContractProfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue