diff --git a/.changeset/string-inputs-update.md b/.changeset/string-inputs-update.md new file mode 100644 index 000000000..01fe64157 --- /dev/null +++ b/.changeset/string-inputs-update.md @@ -0,0 +1,5 @@ +--- +'@workflowbuilder/sdk': patch +--- + +Empty strings are marked as invalid for required string inputs. The TextArea is highlighted. diff --git a/packages/sdk/src/features/json-form/controls/text-area-control/text-area-control.tsx b/packages/sdk/src/features/json-form/controls/text-area-control/text-area-control.tsx index 3af41883f..7d6d7f316 100644 --- a/packages/sdk/src/features/json-form/controls/text-area-control/text-area-control.tsx +++ b/packages/sdk/src/features/json-form/controls/text-area-control/text-area-control.tsx @@ -6,7 +6,7 @@ import { createControlRenderer } from '../../utils/rendering'; import { ControlWrapper } from '../control-wrapper'; function TextAreaControl(props: TextAreaControlProps) { - const { data, handleChange, path, enabled, uischema } = props; + const { data, handleChange, path, enabled, uischema, errors } = props; const { placeholder, minRows, maxRows, disabled } = uischema; const isDisabled = !enabled || disabled === true; @@ -35,6 +35,7 @@ function TextAreaControl(props: TextAreaControlProps) { onChange={onChange} onBlur={onBlur} size="medium" + error={errors.length > 0} /> ); diff --git a/packages/sdk/src/features/json-form/controls/text-control/text-control.tsx b/packages/sdk/src/features/json-form/controls/text-control/text-control.tsx index 15fe5a00f..f78c0dc4d 100644 --- a/packages/sdk/src/features/json-form/controls/text-control/text-control.tsx +++ b/packages/sdk/src/features/json-form/controls/text-control/text-control.tsx @@ -32,10 +32,7 @@ function TextControl(props: TextControlProps) { function onBlur() { const trimmed = inputValue.trim(); - if (trimmed === '') { - // eslint-disable-next-line unicorn/no-useless-undefined - handleChange(path, undefined); - } else if (isNumberInput) { + if (isNumberInput) { const number_ = Number(trimmed); handleChange(path, Number.isNaN(number_) ? undefined : number_); } else { diff --git a/packages/sdk/src/utils/validation/workflow-builder-validator.ts b/packages/sdk/src/utils/validation/workflow-builder-validator.ts index a6e4c645f..af0742c93 100644 --- a/packages/sdk/src/utils/validation/workflow-builder-validator.ts +++ b/packages/sdk/src/utils/validation/workflow-builder-validator.ts @@ -91,7 +91,11 @@ function createValidateFunction(schema: object): ValidateFunction { const validator = new Validator(schema as Schema, '7', false); const validateFn = (data: unknown): boolean => { - const result = validator.validate(data); + // Default schema accepts '' string as valid for required this, clears those values and prompts required. + const formattedData = Object.fromEntries( + Object.entries(data || {}).filter(([, value]) => !(typeof value === 'string' && value.trim() === '')), + ); + const result = validator.validate(formattedData); validateFn.errors = result.valid ? null : mapOutputToErrorObjects(result.errors); return result.valid; };