diff --git a/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.test.ts b/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.test.ts index d30f7159462..958cea3b719 100644 --- a/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.test.ts +++ b/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.test.ts @@ -399,6 +399,15 @@ describe('parseFromExpression', () => { expect(parseFromExpression(true, undefined, 'boolean', false, [])).toBe(false); }); + it('returns defaultValue for number/boolean when expression resolves to null', () => { + // Unresolvable $fromAI() expressions resolve to null in the editor; falling back to + // the default (instead of null) is what lets the Fixed tab clear the expression. + expect( + parseFromExpression('={{ $fromAI("x", "", "boolean") }}', null, 'boolean', false, []), + ).toBe(false); + expect(parseFromExpression('={{ $fromAI("x", "", "number") }}', null, 'number', 0, [])).toBe(0); + }); + it('returns null for other types if value is undefined', () => { expect(parseFromExpression({}, undefined, 'json', null, [])).toBeNull(); }); diff --git a/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.ts b/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.ts index 7a5e8f5a497..6b24d9e8926 100644 --- a/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.ts +++ b/packages/frontend/editor-ui/src/features/ndv/shared/ndv.utils.ts @@ -432,12 +432,13 @@ export function parseFromExpression( return currentParameterValue ? currentParameterValue.replace(/^=+/, '') : null; } - if (typeof evaluatedExpressionValue !== 'undefined') { - return evaluatedExpressionValue; + // Fall back to default when the expression can't resolve (e.g. $fromAI() -> null); `??` keeps a real `false`/`0`. + if (['number', 'boolean'].includes(parameterType)) { + return evaluatedExpressionValue ?? defaultValue; } - if (['number', 'boolean'].includes(parameterType)) { - return defaultValue; + if (typeof evaluatedExpressionValue !== 'undefined') { + return evaluatedExpressionValue; } return null;