From 3a723c14575ec773ac3b77914be76fad2e7c9b87 Mon Sep 17 00:00:00 2001 From: Dennison Bertram Date: Thu, 28 May 2020 23:01:06 -0400 Subject: [PATCH 1/5] =?UTF-8?q?=F0=9F=90=9B=20FIX:=20Allow=20Array=20indix?= =?UTF-8?q?es=20to=20work=20for=20inputs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/customContract/parser.ts | 44 ++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/features/customContract/parser.ts b/src/features/customContract/parser.ts index ae5b4ea..03c93f1 100644 --- a/src/features/customContract/parser.ts +++ b/src/features/customContract/parser.ts @@ -75,26 +75,62 @@ export const customContractParser = ( const parsedInputs = inputs .map((input) => { const value = input.getAttribute(property.attribute); + + // we need to check if the start of value is [ and the end is ] and the middle item is a number. + const getIsArray = (value) => { + if (value.charAt(0) === '[' && value.charAt(value.length - 1) === ']' && !isNaN(value.substring(1, value.length - 1))) { + console.log("Is an integer!", value) + return parseInt(value.substring(1, value.length - 1), 10) + } else { + console.log("Not an integer!", value) + return false + } + } + + const inputArrayValue = getIsArray(value) + const shouldAutoClear = input.getAttribute(`${DATA_PROPERTY}-auto-clear`) === 'true' // Check each input name in ABI equals to the value defined in the DOM - const isInputFound = contractMethod.inputs.some((input) => input.name === value); - + const isInputFound = contractMethod.inputs.some((input) => { + if(input.name === value) return true + //check if the actually array value is less than or equal to the input array length + //note that a zero position value would evaluate falsey, hense we deep equal to false. + if(inputArrayValue !== false && inputArrayValue <= contractMethod.inputs.length-1) { + return true + } + // There is no match for input name, or for array possition, so return false. + return false + }); + + // Now that we know it's an array, check if the array value is valid. + // Note we will have to also check if ALL the array inputs are found. + // Note you could also mix&match the array idnex with a named input (Or too complicated?) + const emptyString = '$true'; const isEmptyString = value === emptyString; if (!['EthValue', emptyString].includes(value) && !isInputFound) { return console.error( - `Input name "${value}" for method ${methodName} does not exists on the contract ABI`, + `(DH-DOM) Input name "${value}" for method ${methodName} does not exists on the contract ABI`, ); } + // TODO: [DEV-312] This is part of the error for anonymous inputs if (isEmptyString && contractMethod.inputs.length > 1) { return console.error( - `Input with empty string (anonymous input) cannot be set since exists more than one input on the contract ABI`, + `(DH-DOM) Input with empty string (anonymous input) + cannot be set since exists more than one input on the contract ABI, + use Array input array Index. (See documentation: docs.dapphero.io) `, ); } + console.log({ + element: input, + id: property.id, + shouldAutoClear, + argumentName: value, + }) return { element: input, id: property.id, From 1d8b9f835071776254abbd5223bdac6fbc9a63e5 Mon Sep 17 00:00:00 2001 From: Dennison Bertram Date: Thu, 28 May 2020 23:04:28 -0400 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=91=8C=20IMPROVE:=20=20remove=20conso?= =?UTF-8?q?le=20logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/customContract/parser.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/features/customContract/parser.ts b/src/features/customContract/parser.ts index 03c93f1..f9e6669 100644 --- a/src/features/customContract/parser.ts +++ b/src/features/customContract/parser.ts @@ -79,10 +79,8 @@ export const customContractParser = ( // we need to check if the start of value is [ and the end is ] and the middle item is a number. const getIsArray = (value) => { if (value.charAt(0) === '[' && value.charAt(value.length - 1) === ']' && !isNaN(value.substring(1, value.length - 1))) { - console.log("Is an integer!", value) return parseInt(value.substring(1, value.length - 1), 10) } else { - console.log("Not an integer!", value) return false } } @@ -125,12 +123,6 @@ export const customContractParser = ( ); } - console.log({ - element: input, - id: property.id, - shouldAutoClear, - argumentName: value, - }) return { element: input, id: property.id, From 3d2957e7f2e826a52d1235f0105e2c6193e0bf1c Mon Sep 17 00:00:00 2001 From: Dennison Bertram Date: Fri, 29 May 2020 14:39:45 -0400 Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=90=9B=20FIX:=20=20Seems=20to=20be=20?= =?UTF-8?q?working.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/customContract/parser.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/customContract/parser.ts b/src/features/customContract/parser.ts index f9e6669..2df660d 100644 --- a/src/features/customContract/parser.ts +++ b/src/features/customContract/parser.ts @@ -123,6 +123,7 @@ export const customContractParser = ( ); } + return { element: input, id: property.id, From 97dfa64a061c5d9d06bfd18c1ec57cd48580871d Mon Sep 17 00:00:00 2001 From: Dennison Bertram Date: Fri, 29 May 2020 14:52:41 -0400 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=91=8C=20IMPROVE:=20=20add=20all=2018?= =?UTF-8?q?=20units=20for=20conversions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/customContract/index.ts | 6 +++--- src/lib/constants.ts | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/features/customContract/index.ts b/src/features/customContract/index.ts index 9f54ecb..667f5ce 100644 --- a/src/features/customContract/index.ts +++ b/src/features/customContract/index.ts @@ -1,5 +1,5 @@ // Constants -import { DATA_FEATURE, DATA_PROPERTY, DATA_MODIFIER } from '../../lib/constants'; +import { DATA_FEATURE, DATA_PROPERTY, DATA_MODIFIER, ETHER_UNITS } from '../../lib/constants'; export const customContract = { id: 'customContract', @@ -85,13 +85,13 @@ export const customContract = { id: 'displayUnits', defaultValue: 'ether', attribute: `${DATA_MODIFIER}-display-units`, - validator: (value) => ['wei', 'ether'].includes(value), + validator: (value) => ETHER_UNITS.includes(value), }, { id: 'contractUnits', defaultValue: 'wei', attribute: `${DATA_MODIFIER}-contract-units`, - validator: (value) => ['wei', 'ether'].includes(value), + validator: (value) => ETHER_UNITS.includes(value), }, { id: 'displayDecimals', diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 86cea87..bdecccb 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -15,6 +15,26 @@ export const ELEMENT_TYPES = { video: 'video', }; +export const ETHER_UNITS = ['wei', 'ether', +'1', +'10', +'100', +'1000', +'10000', +'100000', +'1000000', +'10000000', +'100000000', +'1000000000', +'10000000000', +'100000000000', +'1000000000000', +'10000000000000', +'100000000000000', +'1000000000000000', +'100000000000000000', +'1000000000000000000'] + export const TAG_TYPES = { H1: ELEMENT_TYPES.text, H2: ELEMENT_TYPES.text, From 77dab7d609a50bba6a8f5b83f7a22f76b8eb57af Mon Sep 17 00:00:00 2001 From: Dennison Bertram Date: Tue, 2 Jun 2020 11:22:47 -0400 Subject: [PATCH 5/5] Update src/features/customContract/parser.ts Co-authored-by: Leonardo Galante --- src/features/customContract/parser.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/features/customContract/parser.ts b/src/features/customContract/parser.ts index 2df660d..2e5d96d 100644 --- a/src/features/customContract/parser.ts +++ b/src/features/customContract/parser.ts @@ -90,16 +90,12 @@ export const customContractParser = ( const shouldAutoClear = input.getAttribute(`${DATA_PROPERTY}-auto-clear`) === 'true' // Check each input name in ABI equals to the value defined in the DOM - const isInputFound = contractMethod.inputs.some((input) => { - if(input.name === value) return true - //check if the actually array value is less than or equal to the input array length - //note that a zero position value would evaluate falsey, hense we deep equal to false. - if(inputArrayValue !== false && inputArrayValue <= contractMethod.inputs.length-1) { - return true - } - // There is no match for input name, or for array possition, so return false. - return false - }); +// check if the actual array value is less than or equal to the input array length +/ note that a zero position value would evaluate falsy, hence we deep equal to false. + +const isInputArrayValueValid = inputArrayValue !== false && inputArrayValue <= contractMethod.inputs.length-1 + +const isInputFound = contractMethod.inputs.some(({ name }) => name === value || isInputArrayValueValid); // Now that we know it's an array, check if the array value is valid. // Note we will have to also check if ALL the array inputs are found.