From 46330d4e0605a25878016044037cdd3eb77d053a Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen Date: Mon, 29 Sep 2025 14:39:36 +0200 Subject: [PATCH 1/4] 2175: Adds changeset --- frontend/.changeset/big-dingos-follow.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 frontend/.changeset/big-dingos-follow.md diff --git a/frontend/.changeset/big-dingos-follow.md b/frontend/.changeset/big-dingos-follow.md new file mode 100644 index 0000000..f98629a --- /dev/null +++ b/frontend/.changeset/big-dingos-follow.md @@ -0,0 +1,5 @@ +--- +'pydantic-forms': patch +--- + +Fixes resetting formdata with forms that have no properties From cc63c090824c071b3f92efb6cb201941d2731804 Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen Date: Mon, 29 Sep 2025 14:40:05 +0200 Subject: [PATCH 2/4] 2175: Accept all 200 range status codes --- .../packages/pydantic-forms/src/core/hooks/useApiProvider.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/packages/pydantic-forms/src/core/hooks/useApiProvider.tsx b/frontend/packages/pydantic-forms/src/core/hooks/useApiProvider.tsx index 9e94e3e..89fd15f 100644 --- a/frontend/packages/pydantic-forms/src/core/hooks/useApiProvider.tsx +++ b/frontend/packages/pydantic-forms/src/core/hooks/useApiProvider.tsx @@ -55,7 +55,8 @@ export function useApiProvider( } if ( request.status && - (request.status === 200 || request.status === 201) + request.status >= 200 && + request.status < 300 ) { return { type: PydanticFormApiResponseType.SUCCESS, From c79ba32f014fd025189faced509bdebc57cd9be7 Mon Sep 17 00:00:00 2001 From: Ruben van Leeuwen Date: Mon, 29 Sep 2025 14:41:16 +0200 Subject: [PATCH 3/4] 2175: Make options optional and dont add them to array fields with arrayItems --- .../src/components/defaultComponentMatchers.ts | 6 ++++++ .../src/components/fields/MultiCheckboxField.tsx | 2 +- .../src/components/fields/MultiSelectField.tsx | 2 +- .../src/components/fields/RadioField.tsx | 2 +- .../src/core/hooks/usePydanticFormParser.tsx | 13 +++++++++---- frontend/packages/pydantic-forms/src/types.ts | 2 +- 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/frontend/packages/pydantic-forms/src/components/defaultComponentMatchers.ts b/frontend/packages/pydantic-forms/src/components/defaultComponentMatchers.ts index 31ea907..6750c3b 100644 --- a/frontend/packages/pydantic-forms/src/components/defaultComponentMatchers.ts +++ b/frontend/packages/pydantic-forms/src/components/defaultComponentMatchers.ts @@ -3,6 +3,8 @@ * * We will search for the first field that returns a positive match */ +import _ from 'lodash'; + import { ArrayField, CheckboxField, @@ -101,6 +103,7 @@ const defaultComponentMatchers: PydanticComponentMatcher[] = [ // We are looking for a single value from a set list of options. With less than 4 options, use radio buttons. return ( field.type === PydanticFormFieldType.STRING && + _.isArray(field.options) && field.options?.length > 0 && field.options?.length <= 3 ); @@ -116,6 +119,7 @@ const defaultComponentMatchers: PydanticComponentMatcher[] = [ // We are looking for a single value from a set list of options. With more than 3 options, use a dropdown. return ( field.type === PydanticFormFieldType.STRING && + _.isArray(field.options) && field.options?.length >= 4 ); }, @@ -139,6 +143,7 @@ const defaultComponentMatchers: PydanticComponentMatcher[] = [ matcher(field) { return ( field.type === PydanticFormFieldType.ARRAY && + _.isArray(field.options) && field.options?.length > 0 && field.options?.length <= 5 ); @@ -153,6 +158,7 @@ const defaultComponentMatchers: PydanticComponentMatcher[] = [ }, matcher(field) { return ( + _.isArray(field.options) && field.options?.length > 0 && field.type === PydanticFormFieldType.ARRAY ); diff --git a/frontend/packages/pydantic-forms/src/components/fields/MultiCheckboxField.tsx b/frontend/packages/pydantic-forms/src/components/fields/MultiCheckboxField.tsx index ce4a6ad..f5c2a9e 100644 --- a/frontend/packages/pydantic-forms/src/components/fields/MultiCheckboxField.tsx +++ b/frontend/packages/pydantic-forms/src/components/fields/MultiCheckboxField.tsx @@ -28,7 +28,7 @@ export const MultiCheckboxField = ({ return (
- {options.map((option: PydanticFormFieldOption) => { + {options?.map((option: PydanticFormFieldOption) => { // Extract the unique ID for this option const optionId = `${id}-${option.value}`; diff --git a/frontend/packages/pydantic-forms/src/components/fields/MultiSelectField.tsx b/frontend/packages/pydantic-forms/src/components/fields/MultiSelectField.tsx index 9f49ac6..f03452b 100644 --- a/frontend/packages/pydantic-forms/src/components/fields/MultiSelectField.tsx +++ b/frontend/packages/pydantic-forms/src/components/fields/MultiSelectField.tsx @@ -38,7 +38,7 @@ export const MultiSelectField = ({ }} multiple > - {pydanticFormField.options.map( + {pydanticFormField.options?.map( (option: PydanticFormFieldOption) => (