|
|
|
|
@ -58,6 +58,13 @@ export default {
|
|
|
|
|
computed: {
|
|
|
|
|
isInlineSize () {
|
|
|
|
|
return CSS.supports('container-type: size')
|
|
|
|
|
},
|
|
|
|
|
fieldsUuidIndex () {
|
|
|
|
|
return this.fields.reduce((acc, field) => {
|
|
|
|
|
acc[field.uuid] = field
|
|
|
|
|
|
|
|
|
|
return acc
|
|
|
|
|
}, {})
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
async mounted () {
|
|
|
|
|
@ -96,8 +103,19 @@ export default {
|
|
|
|
|
findPageElementForArea (area) {
|
|
|
|
|
return (this.$root.$el?.parentNode?.getRootNode() || document).getElementById(`page-${area.attachment_uuid}-${area.page}`)
|
|
|
|
|
},
|
|
|
|
|
normalizeFormula (formula, depth = 0) {
|
|
|
|
|
if (depth > 10) return formula
|
|
|
|
|
|
|
|
|
|
return formula.replace(/{{(.*?)}}/g, (match, uuid) => {
|
|
|
|
|
if (this.fieldsUuidIndex[uuid]) {
|
|
|
|
|
return `(${this.normalizeFormula(this.fieldsUuidIndex[uuid].preferences.formula, depth + 1)})`
|
|
|
|
|
} else {
|
|
|
|
|
return match
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
calculateFormula (field) {
|
|
|
|
|
const transformedFormula = field.preferences.formula.replace(/{{(.*?)}}/g, (match, uuid) => {
|
|
|
|
|
const transformedFormula = this.normalizeFormula(field.preferences.formula).replace(/{{(.*?)}}/g, (match, uuid) => {
|
|
|
|
|
return this.readonlyValues[uuid] || this.values[uuid] || 0.0
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|