'use strict' var yo = require('yo-yo') var css = require('./universal-dapp-styles') class MultiParamManager { /** * * @param {bool} lookupOnly * @param {Object} funABI * @param {Function} clickMultiCallBack * @param {string} inputs * @param {string} title * */ constructor (lookupOnly, funABI, clickCallBack, inputs, title) { this.lookupOnly = lookupOnly this.funABI = funABI this.clickCallBack = clickCallBack this.inputs = inputs this.title = title } switchMethodViewOn () { this.contractActionsContainerSingle.style.display = 'none' this.contractActionsContainerMulti.style.display = 'flex' } switchMethodViewOff () { this.contractActionsContainerSingle.style.display = 'flex' this.contractActionsContainerMulti.style.display = 'none' } createMultiFields () { if (this.funABI.inputs) { return yo`
${this.funABI.inputs.map(function (inp) { return yo`
` })}
` } } render () { var title if (this.title) { title = this.title } else if (this.funABI.name) { title = this.funABI.name } else { title = '(fallback)' } var basicInputField = yo`` basicInputField.setAttribute('placeholder', this.inputs) basicInputField.setAttribute('title', this.inputs) var onClick = (domEl) => { this.clickCallBack(this.funABI.inputs, basicInputField.value) } this.contractActionsContainerSingle = yo`
${basicInputField} { this.switchMethodViewOn() }} title=${title} >
` var multiFields = this.createMultiFields() var multiOnClick = () => { var valArray = multiFields.querySelectorAll('input') var ret = '' for (var k = 0; k < valArray.length; k++) { var el = valArray[k] if (ret !== '') ret += ',' ret += el.value } this.clickCallBack(this.funABI.inputs, ret) } var button = yo`` this.contractActionsContainerMulti = yo`
{ this.switchMethodViewOff() }} class="${css.multiHeader}">
${title}
${multiFields}
${button}
` var contractProperty = yo`
${this.contractActionsContainerSingle} ${this.contractActionsContainerMulti}
` if (this.lookupOnly) { contractProperty.classList.add(css.constant) button.setAttribute('title', (title + ' - call')) button.innerHTML = 'call' this.contractActionsContainerSingle.querySelector(`.${css.instanceButton}`).setAttribute('title', (title + ' - call')) } else { button.innerHTML = 'transact' } if (this.funABI.inputs && this.funABI.inputs.length > 0) { contractProperty.classList.add(css.hasArgs) } else { this.contractActionsContainerSingle.querySelector('i').style.visibility = 'hidden' basicInputField.style.display = 'none' } if (this.funABI.payable === true) { contractProperty.classList.add(css.payable) button.setAttribute('title', (title + ' - transact (payable)')) this.contractActionsContainerSingle.querySelector('button').setAttribute('title', (title + ' - transact (payable)')) } if (!this.lookupOnly && this.funABI.payable === false) { button.setAttribute('title', (title + ' - transact (not payable)')) this.contractActionsContainerSingle.querySelector('button').setAttribute('title', (title + ' - transact (not payable)')) } return contractProperty } } module.exports = MultiParamManager