Skip to content

Commit 5e61af3

Browse files
author
Ruben van Leeuwen
committed
1719: Makes rowRenderer configurable
1 parent 839fb76 commit 5e61af3

File tree

4 files changed

+21
-16
lines changed

4 files changed

+21
-16
lines changed

frontend/packages/pydantic-forms/src/components/fields/FieldWrap.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,27 @@ import { FormRow } from './FormRow';
1717

1818
interface FieldWrapProps {
1919
pydanticFormField: PydanticFormField;
20-
fieldState: ControllerFieldState;
2120
children: React.ReactNode;
2221
}
2322

24-
export const FieldWrap = ({
25-
pydanticFormField,
26-
fieldState,
27-
children,
28-
}: FieldWrapProps) => {
29-
const { errorDetails } = usePydanticFormContext();
30-
23+
export const FieldWrap = ({ pydanticFormField, children }: FieldWrapProps) => {
24+
const { errorDetails, rhf, config } = usePydanticFormContext();
25+
const RowRenderer = config?.rowRenderer ? config.rowRenderer : FormRow;
26+
const fieldState = rhf.getFieldState(pydanticFormField.id);
3127
const errorMsg =
3228
errorDetails?.mapped?.[pydanticFormField.id]?.msg ??
3329
fieldState.error?.message;
3430
const isInvalid = errorMsg ?? fieldState.invalid;
3531

3632
return (
37-
<FormRow
33+
<RowRenderer
3834
title={pydanticFormField.title}
3935
description={pydanticFormField.description}
4036
required={pydanticFormField.required}
4137
isInvalid={!!isInvalid}
4238
error={errorMsg as string}
4339
>
4440
<div>{children}</div>
45-
</FormRow>
41+
</RowRenderer>
4642
);
4743
};

frontend/packages/pydantic-forms/src/components/render/RenderForm.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ const RenderForm = (contextProps: PydanticFormContextProps) => {
6767

6868
return (
6969
<form action={''} onSubmit={submitForm}>
70-
{title !== false && <h2>{title ?? pydanticFormSchema.title}</h2>}
70+
{title !== false && title !== 'undefined' && (
71+
<h2>{title ?? pydanticFormSchema.title}</h2>
72+
)}
7173

7274
{headerComponent}
7375

frontend/packages/pydantic-forms/src/core/WrapFieldElement.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const WrapFieldElement = ({
1818
<Controller
1919
name={pydanticFormField.id}
2020
control={rhf.control}
21-
render={({ field, fieldState }) => {
21+
render={({ field }) => {
2222
const { onChange, onBlur, value, name, ref } = field;
2323
const onChangeHandle = (val: string) => {
2424
onChange(val);
@@ -30,10 +30,7 @@ export const WrapFieldElement = ({
3030
};
3131

3232
return (
33-
<FieldWrap
34-
pydanticFormField={pydanticFormField}
35-
fieldState={fieldState}
36-
>
33+
<FieldWrap pydanticFormField={pydanticFormField}>
3734
<PydanticFormControlledElement
3835
onChange={onChangeHandle}
3936
onBlur={onBlur}

frontend/packages/pydantic-forms/src/types.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,15 @@ export type PydanticFormZodValidationFn = (
249249
rhf?: ReturnType<typeof useForm>,
250250
) => z.ZodTypeAny;
251251

252+
export type RowRenderer = React.JSXElementConstructor<{
253+
title: string;
254+
description?: string;
255+
required?: boolean;
256+
isInvalid?: boolean;
257+
error?: string;
258+
children: React.ReactNode;
259+
}>;
260+
252261
export interface PydanticFormZodValidationPresets {
253262
[type: string]: PydanticFormZodValidationFn;
254263
}
@@ -286,6 +295,7 @@ export interface PydanticFormsContextConfig {
286295

287296
formRenderer?: FormRenderer;
288297
footerRenderer?: React.JSXElementConstructor<object>;
298+
rowRenderer?: RowRenderer;
289299

290300
// Extend field definitions
291301
fieldDetailProvider?: PydanticFormFieldDetailProvider;

0 commit comments

Comments
 (0)