From 91cc303c9b32c9b43facb05bdb6696e30bd28de2 Mon Sep 17 00:00:00 2001 From: js-ta <62553326+js-ta@users.noreply.github.com> Date: Tue, 4 Mar 2025 10:31:03 +0100 Subject: [PATCH 1/2] Support integer values in select element --- src/tests/createHeadlessForm.test.js | 22 ++++++++++++++++++++++ src/tests/helpers.js | 21 +++++++++++++++++++++ src/yupSchema.js | 5 ++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/tests/createHeadlessForm.test.js b/src/tests/createHeadlessForm.test.js index 5d5e12ba4..cd7279bfb 100644 --- a/src/tests/createHeadlessForm.test.js +++ b/src/tests/createHeadlessForm.test.js @@ -63,6 +63,7 @@ import { schemaForErrorMessageSpecificity, jsfConfigForErrorMessageSpecificity, schemaInputTypeFile, + schemaWithSelectInteger, } from './helpers'; import { mockConsole, restoreConsoleAndEnsureItWasNotCalled } from './testUtils'; import { createHeadlessForm } from '@/createHeadlessForm'; @@ -657,6 +658,27 @@ describe('createHeadlessForm', () => { ], }); }); + + it('supports "select" field with integer values', async () => { + const { handleValidation } = createHeadlessForm(schemaWithSelectInteger); + const validateForm = (vals) => friendlyError(handleValidation(vals)); + + // Check for invalid option + expect( + validateForm({ + account_type: 4, + }) + ).toEqual({ + account_type: 'The option 4 is not valid.', + }); + + // Check for valid option + expect( + validateForm({ + account_type: 1, + }) + ).toBeUndefined(); + }); }); describe('support "radio" field type', () => { it('support "radio" field type @deprecated', () => { diff --git a/src/tests/helpers.js b/src/tests/helpers.js index e07d3ee7c..3a4d77948 100644 --- a/src/tests/helpers.js +++ b/src/tests/helpers.js @@ -2327,3 +2327,24 @@ export const schemaWithCustomValidationsAndConditionals = { }, ], }; + +export const schemaWithSelectInteger = { + additionalProperties: false, + type: 'object', + properties: { + account_type: { + title: 'Select an account type', + description: '', + 'x-jsf-presentation': { + inputType: 'select', + }, + oneOf: [ + { title: 'Normal User', const: 0 }, + { title: 'Business', const: 1 }, + { title: 'Services Provider', const: 2 }, + ], + type: 'integer', + }, + }, + required: [], +}; diff --git a/src/yupSchema.js b/src/yupSchema.js index 873ec73c5..aea0855f5 100644 --- a/src/yupSchema.js +++ b/src/yupSchema.js @@ -273,6 +273,8 @@ const getYupSchema = ({ inputType, ...field }) => { switch (type) { case 'number': return yupSchemas.radioOrSelectNumber(optionValues); + case 'integer': + return yupSchemas.radioOrSelectNumber(optionValues); case 'boolean': return yupSchemas.radioOrSelectBoolean(optionValues); default: @@ -513,7 +515,8 @@ export function buildYupSchema(field, config, logic) { validators.push(withFile); } - if (jsonType === 'integer') { + const hasOptions = field.options?.length > 0; + if (jsonType === 'integer' && !hasOptions) { validators.push(withInteger); } From 9ba9296eadeecf90c30069d08aa17718fae4e712 Mon Sep 17 00:00:00 2001 From: Sandrina Pereira Date: Thu, 13 Mar 2025 08:47:14 +0000 Subject: [PATCH 2/2] Release 0.11.12-dev.20250313084704 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b4afe9a4..94620ccbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@remoteoss/json-schema-form", - "version": "0.11.11-beta.0", + "version": "0.11.12-dev.20250313084704", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@remoteoss/json-schema-form", - "version": "0.11.11-beta.0", + "version": "0.11.12-dev.20250313084704", "license": "MIT", "dependencies": { "json-logic-js": "^2.0.2", diff --git a/package.json b/package.json index 06e290697..abdd1967d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@remoteoss/json-schema-form", - "version": "0.11.11-beta.0", + "version": "0.11.12-dev.20250313084704", "description": "Headless UI form powered by JSON Schemas", "author": "Remote.com (https://remote.com/)", "license": "MIT",