Skip to content

Commit c7ee7ee

Browse files
authored
Merge pull request #41 from workfloworchestrator/1719-labels-fix
1719 labels fix
2 parents fe2be14 + 4300f25 commit c7ee7ee

File tree

13 files changed

+71
-66
lines changed

13 files changed

+71
-66
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'pydantic-forms': patch
3+
---
4+
5+
Fixes form labels
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'pydantic-forms': patch
3+
---
4+
5+
Makes rowRenderer configurable

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

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,46 +8,35 @@
88
*
99
*/
1010
import React from 'react';
11-
import type { ControllerFieldState } from 'react-hook-form';
1211

13-
import ResetNullableFieldTrigger from '@/components/form/ResetNullableFieldTrigger';
1412
import { usePydanticFormContext } from '@/core';
1513
import { PydanticFormField } from '@/types';
1614

1715
import { FormRow } from './FormRow';
1816

1917
interface FieldWrapProps {
2018
pydanticFormField: PydanticFormField;
21-
fieldState: ControllerFieldState;
2219
children: React.ReactNode;
2320
}
2421

25-
export const FieldWrap = ({
26-
pydanticFormField,
27-
fieldState,
28-
children,
29-
}: FieldWrapProps) => {
30-
const { errorDetails } = usePydanticFormContext();
31-
22+
export const FieldWrap = ({ pydanticFormField, children }: FieldWrapProps) => {
23+
const { errorDetails, rhf, config } = usePydanticFormContext();
24+
const RowRenderer = config?.rowRenderer ? config.rowRenderer : FormRow;
25+
const fieldState = rhf.getFieldState(pydanticFormField.id);
3226
const errorMsg =
3327
errorDetails?.mapped?.[pydanticFormField.id]?.msg ??
3428
fieldState.error?.message;
3529
const isInvalid = errorMsg ?? fieldState.invalid;
3630

3731
return (
38-
<FormRow
39-
label={
40-
<>
41-
{pydanticFormField.title}
42-
<ResetNullableFieldTrigger field={pydanticFormField} />
43-
</>
44-
}
32+
<RowRenderer
33+
title={pydanticFormField.title}
4534
description={pydanticFormField.description}
4635
required={pydanticFormField.required}
4736
isInvalid={!!isInvalid}
4837
error={errorMsg as string}
4938
>
5039
<div>{children}</div>
51-
</FormRow>
40+
</RowRenderer>
5241
);
5342
};

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { HTMLAttributes, ReactElement, ReactNode } from 'react';
33

44
type FormRowProps = {
55
children: ReactElement;
6-
label?: ReactNode;
6+
title: string;
77
isInvalid?: boolean;
88
error?: ReactNode | ReactNode[];
99
description?: string;
@@ -12,19 +12,17 @@ type FormRowProps = {
1212

1313
export const FormRow = ({
1414
children,
15-
label,
16-
isInvalid,
15+
title,
1716
error,
18-
...rest
17+
description,
18+
required,
1919
}: FormRowProps) => {
20-
// TODO: readd required, description, classname
2120
return (
22-
<div {...(rest as HTMLAttributes<HTMLElement>)}>
23-
{label && (
24-
<label>
25-
{label} {isInvalid && '!!!'}
26-
</label>
27-
)}
21+
<div>
22+
<label>
23+
{title} {required && <span style={{ color: 'red' }}>*</span>}
24+
</label>
25+
{description && <div>{description}</div>}
2826
{children}
2927
{error}
3028
</div>

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/PydanticFormContextProvider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ function PydanticFormContextProvider({
135135
const { pydanticFormSchema, isLoading: isParsingSchema } =
136136
usePydanticFormParser(
137137
rawSchema,
138-
formLabels,
138+
formLabels?.labels,
139139
fieldDetailProvider,
140140
formStructureMutator,
141141
);
@@ -223,7 +223,7 @@ function PydanticFormContextProvider({
223223
}
224224

225225
const initialData = getFormValuesFromFieldOrLabels(pydanticFormSchema, {
226-
...formLabels,
226+
...formLabels?.data,
227227
...customData,
228228
});
229229

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/core/helper.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,7 @@ export const getFieldBySection = (components: PydanticFormComponents) => {
301301
*/
302302
export const getFormValuesFromFieldOrLabels = (
303303
pydanticFormSchema: PydanticFormSchema,
304-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
305-
labelData?: Record<string, any>,
304+
labelData?: Record<string, string>,
306305
) => {
307306
const fieldValues: Record<string, string> = {};
308307

frontend/packages/pydantic-forms/src/core/hooks/useApiProvider.tsx

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
/* eslint-disable @typescript-eslint/no-explicit-any */
2-
31
/**
42
* Pydantic Forms
53
*
@@ -22,12 +20,7 @@ import type {
2220
PydanticFormMetaData,
2321
} from '@/types';
2422

25-
const ignoreApiErrors = async (
26-
req: Promise<unknown>,
27-
// ignoreCodes: number[],
28-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
29-
): Promise<any> => {
30-
// TODO: What to use these for: ignoreCodes
23+
const ignoreApiErrors = async (req: Promise<unknown>): Promise<unknown> => {
3124
try {
3225
return await req;
3326
} catch (error) {

frontend/packages/pydantic-forms/src/core/hooks/useCustomDataProvider.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import useSWR from 'swr';
22

3-
import { PydanticFormCustomDataProvider, PydanticFormLabels } from '@/types';
3+
import {
4+
PydanticFormCustomDataProvider,
5+
PydanticFormLabelProviderResponse,
6+
} from '@/types';
47

58
export const useCustomDataProvider = (
69
customDataProviderCacheKey: number,
710
customDataProvider?: PydanticFormCustomDataProvider,
811
) => {
9-
return useSWR<PydanticFormLabels>(
12+
return useSWR<PydanticFormLabelProviderResponse['data']>(
1013
// cache key
1114
[`pydanticFormsDataProvider-${customDataProviderCacheKey}`],
1215

0 commit comments

Comments
 (0)