diff --git a/app/imports/api/engine/computation/buildComputation/parseCalculationFields.js b/app/imports/api/engine/computation/buildComputation/parseCalculationFields.js index d49ce9b7..d8a7cdba 100644 --- a/app/imports/api/engine/computation/buildComputation/parseCalculationFields.js +++ b/app/imports/api/engine/computation/buildComputation/parseCalculationFields.js @@ -26,6 +26,10 @@ function discoverInlineCalculationFields(prop, schemas){ unset(prop, calcKey); return; } + + // Set the value to the uncomputed string for use in calculations + inlineCalcObj.value = string; + // Has the text, if it matches the existing hash, stop const inlineCalcHash = cyrb53(inlineCalcObj.text); if (inlineCalcHash === inlineCalcObj.hash){ @@ -33,10 +37,9 @@ function discoverInlineCalculationFields(prop, schemas){ } inlineCalcObj.hash = inlineCalcHash; inlineCalcObj.inlineCalculations = []; - // Set the value to the uncomputed string for use in calculations + // It will be re set including the embedded calculation at the end of // the computation - inlineCalcObj.value = string; let matches = string.matchAll(INLINE_CALCULATION_REGEX); for (let match of matches){ let calculation = match[1]; diff --git a/app/imports/parser/parseTree/accessor.js b/app/imports/parser/parseTree/accessor.js index 8c5b3773..855f9044 100644 --- a/app/imports/parser/parseTree/accessor.js +++ b/app/imports/parser/parseTree/accessor.js @@ -16,6 +16,12 @@ const accessor = { value = value[name]; }); let valueType = typeof value; + // If the accessor returns an objet, get the object's value instead + while (valueType === 'object'){ + value = value.value; + valueType = typeof value; + } + // Return a parse node based on the type returned if (valueType === 'string' || valueType === 'number' || valueType === 'boolean'){ return { result: constant.create({ @@ -34,6 +40,7 @@ const accessor = { }; } else { context.error(`${node.name} returned an unexpected type`); + context.error(JSON.stringify(value, null, 2)); return { result: accessor.create({ name: node.name,