diff --git a/packages/builder/src/components/design/settings/componentSettings.js b/packages/builder/src/components/design/settings/componentSettings.js index 927c2d9175..7ccc7a6463 100644 --- a/packages/builder/src/components/design/settings/componentSettings.js +++ b/packages/builder/src/components/design/settings/componentSettings.js @@ -86,6 +86,7 @@ const componentMap = { "validation/boolean": ValidationEditor, "validation/datetime": ValidationEditor, "validation/attachment": ValidationEditor, + "validation/attachment_single": ValidationEditor, "validation/signature": ValidationEditor, "validation/link": ValidationEditor, "validation/bb_reference": ValidationEditor, diff --git a/packages/builder/src/components/design/settings/controls/ValidationEditor/ValidationDrawer.svelte b/packages/builder/src/components/design/settings/controls/ValidationEditor/ValidationDrawer.svelte index 29ce0bd064..eb1f7988fc 100644 --- a/packages/builder/src/components/design/settings/controls/ValidationEditor/ValidationDrawer.svelte +++ b/packages/builder/src/components/design/settings/controls/ValidationEditor/ValidationDrawer.svelte @@ -108,6 +108,7 @@ Constraints.MaxFileSize, Constraints.MaxUploadSize, ], + ["attachment_single"]: [Constraints.Required, Constraints.MaxUploadSize], ["signature"]: [Constraints.Required], ["link"]: [ Constraints.Required, diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 0637004e36..9084a25753 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -4427,7 +4427,7 @@ "defaultValue": false }, { - "type": "validation/attachment", + "type": "validation/attachment_single", "label": "Validation", "key": "validation" }, diff --git a/packages/client/src/components/app/forms/validation.js b/packages/client/src/components/app/forms/validation.js index 903e1a47e7..5dfeb09f46 100644 --- a/packages/client/src/components/app/forms/validation.js +++ b/packages/client/src/components/app/forms/validation.js @@ -199,6 +199,14 @@ const parseType = (value, type) => { return value } + // Parse attachment single, treating no key as null + if (type === FieldTypes.ATTACHMENT_SINGLE) { + if (!value?.key) { + return null + } + return value + } + // Parse links, treating no elements as null if (type === FieldTypes.LINK) { if (!Array.isArray(value) || !value.length) { @@ -245,10 +253,8 @@ const maxLengthHandler = (value, rule) => { // Evaluates a max file size (MB) constraint const maxFileSizeHandler = (value, rule) => { const limit = parseType(rule.value, "number") - return ( - value == null || - !value.some(attachment => attachment.size / 1000000 > limit) - ) + const check = attachment => attachment.size / 1000000 > limit + return value == null || !(value?.key ? check(value) : value.some(check)) } // Evaluates a max total upload size (MB) constraint @@ -256,8 +262,11 @@ const maxUploadSizeHandler = (value, rule) => { const limit = parseType(rule.value, "number") return ( value == null || - value.reduce((acc, currentItem) => acc + currentItem.size, 0) / 1000000 <= - limit + (value?.key + ? value.size / 1000000 <= limit + : value.reduce((acc, currentItem) => acc + currentItem.size, 0) / + 1000000 <= + limit) ) }