Skip to content

Commit 3996f93

Browse files
authored
Fix data node usage in HTML content (baserow#4379)
1 parent 9845d2f commit 3996f93

File tree

7 files changed

+61
-4
lines changed

7 files changed

+61
-4
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"type": "bug",
3+
"message": "Resolved a bug which prevented formula fields from working correctly with HTML content.",
4+
"issue_origin": "github",
5+
"issue_number": 4377,
6+
"domain": "core",
7+
"bullet_points": [],
8+
"created_at": "2025-12-03"
9+
}

web-frontend/modules/core/components/formula/FormulaInputContext.vue

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@node-selected="$emit('node-selected', $event)"
1515
@node-unselected="$emit('node-unselected')"
1616
/>
17-
<div class="formula-input-context__footer">
17+
<div v-if="advancedModeEnabled" class="formula-input-context__footer">
1818
<ButtonText
1919
type="primary"
2020
icon="iconoir-input-field"
@@ -59,6 +59,7 @@
5959
<script>
6060
import context from '@baserow/modules/core/mixins/context'
6161
import NodeExplorer from '@baserow/modules/core/components/nodeExplorer/NodeExplorer'
62+
import { BASEROW_FORMULA_MODES } from '@baserow/modules/core/formula/constants'
6263
6364
export default {
6465
name: 'FormulaInputContext',
@@ -87,7 +88,7 @@ export default {
8788
required: false,
8889
default: 'advanced',
8990
validator: (value) => {
90-
return ['advanced', 'simple'].includes(value)
91+
return BASEROW_FORMULA_MODES.includes(value)
9192
},
9293
},
9394
/**
@@ -105,6 +106,15 @@ export default {
105106
required: false,
106107
default: false,
107108
},
109+
/**
110+
* An array of Baserow formula modes which the parent formula input
111+
* component allows to be used. By default, in `FormulaInputField`,
112+
* we will allow all modes.
113+
*/
114+
enabledModes: {
115+
type: Array,
116+
required: true,
117+
},
108118
},
109119
data() {
110120
return {
@@ -118,6 +128,9 @@ export default {
118128
}
119129
},
120130
computed: {
131+
advancedModeEnabled() {
132+
return this.enabledModes.includes('advanced')
133+
},
121134
isAdvancedMode() {
122135
return this.mode === 'advanced'
123136
},

web-frontend/modules/core/components/formula/FormulaInputField.vue

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
:has-value="value.length > 0"
2323
:allow-node-selection="allowNodeSelection"
2424
:nodes-hierarchy="nodesHierarchy"
25+
:enabled-modes="enabledModes"
2526
@node-selected="handleNodeSelected"
2627
@node-unselected="unSelectNode"
2728
@mode-changed="handleModeChange"
@@ -75,6 +76,7 @@ import FormulaInputContext from '@baserow/modules/core/components/formula/Formul
7576
import { isFormulaValid } from '@baserow/modules/core/formula'
7677
import NodeHelpTooltip from '@baserow/modules/core/components/nodeExplorer/NodeHelpTooltip'
7778
import { fixPropertyReactivityForProvide } from '@baserow/modules/core/utils/object'
79+
import { BASEROW_FORMULA_MODES } from '@baserow/modules/core/formula/constants'
7880
7981
export default {
8082
name: 'FormulaInputField',
@@ -139,7 +141,7 @@ export default {
139141
required: false,
140142
default: 'simple',
141143
validator: (value) => {
142-
return ['advanced', 'simple', 'raw'].includes(value)
144+
return BASEROW_FORMULA_MODES.includes(value)
143145
},
144146
},
145147
contextPosition: {
@@ -150,6 +152,15 @@ export default {
150152
return ['bottom', 'left', 'right'].includes(value)
151153
},
152154
},
155+
/**
156+
* An array of Baserow formula modes which the parent formula input
157+
* component allows to be used. By default, we will allow all modes.
158+
*/
159+
enabledModes: {
160+
type: Array,
161+
required: false,
162+
default: () => BASEROW_FORMULA_MODES,
163+
},
153164
},
154165
data() {
155166
return {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const BASEROW_FORMULA_MODES = ['raw', 'simple', 'advanced']

web-frontend/modules/core/runtimeFormulaTypes.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,12 @@ export class RuntimeConcat extends RuntimeFormulaFunction {
227227
if (args.every((arg, index) => index % 2 === 0 || arg.type === 'newLine')) {
228228
return args
229229
.filter((arg, index) => index % 2 === 0) // Remove the new lines elements
230-
.map((arg) => ({ type: 'wrapper', content: [arg].flat() }))
230+
.map((arg) => {
231+
// If arg is already a wrapper, extract its content; otherwise wrap it
232+
const content =
233+
arg?.type === 'wrapper' && arg.content ? arg.content : [arg].flat()
234+
return { type: 'wrapper', content }
235+
})
231236
}
232237
return { type: 'wrapper', content: args }
233238
}

web-frontend/modules/integrations/core/components/services/CoreHTTPRequestServiceForm.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@
168168
>
169169
<InjectedFormulaInput
170170
v-model="values.body_content"
171+
:enabled-modes="
172+
values.body_type === 'plain'
173+
? BASEROW_FORMULA_MODES
174+
: ['raw', 'simple']
175+
"
171176
:placeholder="$t('coreHTTPRequestServiceForm.bodyPlaceholder')"
172177
/>
173178
</FormGroup>
@@ -261,6 +266,7 @@ import {
261266
helpers,
262267
} from '@vuelidate/validators'
263268
import { uuid } from '@baserow/modules/core/utils/string'
269+
import { BASEROW_FORMULA_MODES } from '@baserow/modules/core/formula/constants'
264270
265271
export default {
266272
name: 'CoreHTTPRequestService',
@@ -295,6 +301,9 @@ export default {
295301
}
296302
},
297303
computed: {
304+
BASEROW_FORMULA_MODES() {
305+
return BASEROW_FORMULA_MODES
306+
},
298307
methods() {
299308
return [
300309
{ name: 'GET', value: 'GET' },

web-frontend/modules/integrations/core/components/services/CoreSMTPEmailServiceForm.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@
101101
>
102102
<InjectedFormulaInput
103103
v-model="values.body"
104+
:enabled-modes="
105+
values.body_type === 'plain'
106+
? BASEROW_FORMULA_MODES
107+
: ['raw', 'simple']
108+
"
104109
:placeholder="$t('smtpEmailForm.bodyPlaceholder')"
105110
textarea
106111
/>
@@ -113,6 +118,7 @@ import form from '@baserow/modules/core/mixins/form'
113118
import InjectedFormulaInput from '@baserow/modules/core/components/formula/InjectedFormulaInput'
114119
import IntegrationDropdown from '@baserow/modules/core/components/integrations/IntegrationDropdown'
115120
import { SMTPIntegrationType } from '@baserow/modules/integrations/core/integrationTypes'
121+
import { BASEROW_FORMULA_MODES } from '@baserow/modules/core/formula/constants'
116122
117123
export default {
118124
name: 'CoreSMTPEmailServiceForm',
@@ -160,6 +166,9 @@ export default {
160166
}
161167
},
162168
computed: {
169+
BASEROW_FORMULA_MODES() {
170+
return BASEROW_FORMULA_MODES
171+
},
163172
integrations() {
164173
if (!this.application) {
165174
return []

0 commit comments

Comments
 (0)