Fix outputs in Contract Constant Queries (#4953)
This commit is contained in:
parent
4ebd597354
commit
c009a289d5
@ -40,7 +40,6 @@ export default class Queries extends Component {
|
|||||||
if (!contract) {
|
if (!contract) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const queries = contract.functions
|
const queries = contract.functions
|
||||||
.filter((fn) => fn.constant)
|
.filter((fn) => fn.constant)
|
||||||
.sort(this._sortEntries);
|
.sort(this._sortEntries);
|
||||||
@ -113,7 +112,12 @@ export default class Queries extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
renderQuery (fn) {
|
renderQuery (fn) {
|
||||||
const { values } = this.props;
|
const { abi } = fn;
|
||||||
|
let values = this.props.values[fn.name] || [];
|
||||||
|
|
||||||
|
if (values && typeof values.slice === 'function') {
|
||||||
|
values = values.slice();
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={ styles.container } key={ fn.signature }>
|
<div className={ styles.container } key={ fn.signature }>
|
||||||
@ -125,40 +129,59 @@ export default class Queries extends Component {
|
|||||||
<CardText
|
<CardText
|
||||||
className={ styles.methodContent }
|
className={ styles.methodContent }
|
||||||
>
|
>
|
||||||
{ this.renderValue(values[fn.name], fn.outputs[0].kind.type) }
|
{
|
||||||
|
abi.outputs
|
||||||
|
.map((output, index) => this.renderValue(values[index], output, index))
|
||||||
|
}
|
||||||
</CardText>
|
</CardText>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderValue (value, type) {
|
renderValue (tokenValue, output, key) {
|
||||||
if (typeof value === 'undefined') {
|
if (typeof tokenValue === 'undefined') {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { api } = this.context;
|
|
||||||
const { accountsInfo } = this.props;
|
const { accountsInfo } = this.props;
|
||||||
|
const { name, type } = output;
|
||||||
|
const label = `${name ? `${name}: ` : ''}${type}`;
|
||||||
|
const value = this.getTokenValue(tokenValue);
|
||||||
|
|
||||||
let valueToDisplay = value;
|
|
||||||
|
|
||||||
if (api.util.isArray(value)) {
|
|
||||||
valueToDisplay = api.util.bytesToHex(value);
|
|
||||||
} else if (typeof value === 'boolean') {
|
|
||||||
valueToDisplay = value ? 'true' : 'false';
|
|
||||||
}
|
|
||||||
return (
|
return (
|
||||||
<TypedInput
|
<TypedInput
|
||||||
accounts={ accountsInfo }
|
accounts={ accountsInfo }
|
||||||
allowCopy
|
allowCopy
|
||||||
|
key={ key }
|
||||||
isEth={ false }
|
isEth={ false }
|
||||||
param={ type }
|
label={ label }
|
||||||
|
param={ output.type }
|
||||||
readOnly
|
readOnly
|
||||||
value={ valueToDisplay }
|
value={ value }
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getTokenValue (token) {
|
||||||
|
const { api } = this.context;
|
||||||
|
const { type, value } = token;
|
||||||
|
|
||||||
|
if (value === null || value === undefined) {
|
||||||
|
return 'no data';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === 'array' || type === 'fixedArray') {
|
||||||
|
return value.map((tok) => this.getTokenValue(tok));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
return api.util.bytesToHex(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
_sortEntries (a, b) {
|
_sortEntries (a, b) {
|
||||||
return a.name.localeCompare(b.name);
|
return a.name.localeCompare(b.name);
|
||||||
}
|
}
|
||||||
|
@ -363,12 +363,15 @@ class Contract extends Component {
|
|||||||
.filter((fn) => !fn.inputs.length);
|
.filter((fn) => !fn.inputs.length);
|
||||||
|
|
||||||
Promise
|
Promise
|
||||||
.all(queries.map((query) => query.call()))
|
.all(queries.map((query) => query.call({ rawTokens: true })))
|
||||||
.then(results => {
|
.then(results => {
|
||||||
const values = queries.reduce((object, fn, idx) => {
|
const values = queries.reduce((object, fn, idx) => {
|
||||||
const key = fn.name;
|
const key = fn.name;
|
||||||
|
|
||||||
object[key] = results[idx];
|
object[key] = fn.outputs.length === 1
|
||||||
|
? [ results[idx] ]
|
||||||
|
: results[idx];
|
||||||
|
|
||||||
return object;
|
return object;
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user