Skip to content

Commit 17a7d16

Browse files
committed
fix: fix config.name to optional in render hooks
1 parent 1072cc6 commit 17a7d16

File tree

6 files changed

+41
-32
lines changed

6 files changed

+41
-32
lines changed

src/v2/components/FormGenerator.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ export function FormGenerator(props: Partial<IFormGeneratorProps>) {
193193
return (
194194
<>
195195
{(schemas as ISchema[]).map((schema) => {
196-
const key = schema.variant + schema.component + (schema.config.name || "") + (schema.key || "") + parent + generatedKey;
196+
const key = schema.variant + schema.component + (schema.config?.name || "") + (schema.key || "") + parent + generatedKey;
197197
return (
198198
<SchemaComponent
199199
key={key}

src/v2/components/FormManagement.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ export function FormManagement(props: Partial<IFormManagementProps>) {
184184
return (
185185
<>
186186
{(schemas as ISchema[]).map((schema) => {
187-
const key = schema.variant + schema.component + (schema.config.name || "") + (schema.key || "") + parent + generatedKey;
187+
const key = schema.variant + schema.component + (schema.config?.name || "") + (schema.key || "") + parent + generatedKey;
188188
return (
189189
<SchemaComponent
190190
key={key}

src/v2/hooks/useField.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type { IForm } from "../logic/createForm";
88
import { IDefaultProp, ISchemaFieldCore } from "../types";
99
import { FormContext } from "../contexts/FormContext";
1010
import useSubscribeAndCompare from "./useSubscribeAndCompare";
11+
import generateId from "../utils/generateId";
1112

1213
// eslint-disable-next-line no-use-before-define
1314
export const useField = <TSchema extends ISchemaFieldCore>(props: {
@@ -20,6 +21,8 @@ export const useField = <TSchema extends ISchemaFieldCore>(props: {
2021
const { form = formContext, schema } = props as { form: IForm<TSchema>, schema: TSchema };
2122
const _ref = useRef<any>();
2223

24+
const identity = schema.config?.name || schema.key || generateId();
25+
2326
useSubscribeAndCompare({
2427
form,
2528
getState() {
@@ -34,11 +37,11 @@ export const useField = <TSchema extends ISchemaFieldCore>(props: {
3437
});
3538

3639
useEffect(() => {
37-
form.fieldRef[schema.config.name] = _ref;
40+
form.fieldRef[identity] = _ref;
3841
return () => {
39-
delete form.fieldRef[schema.config.name];
42+
delete form.fieldRef[identity];
4043
};
41-
}, [schema.config.name]);
44+
}, [identity]);
4245

4346
return {
4447
state: form.getSchemaFieldState<TSchema["initialValue"], TSchema["propStateType"] & IDefaultProp>(schema as any),
@@ -49,16 +52,16 @@ export const useField = <TSchema extends ISchemaFieldCore>(props: {
4952
onChange: useCallback(
5053
(arg: any) => {
5154
if (typeof arg === "function") {
52-
form.setValue(schema.config.name, arg(form.state.values));
55+
form.setValue(identity, arg(form.state.values));
5356
} else {
54-
form.setValue(schema.config.name, arg);
57+
form.setValue(identity, arg);
5558
}
5659
},
57-
[schema.config.name, form],
60+
[identity, form],
5861
),
5962
onBlur: useCallback(
60-
() => form.updateTouch(schema.config.name),
61-
[schema.config.name, form],
63+
() => form.updateTouch(identity),
64+
[identity, form],
6265
),
6366
};
6467
};

src/v2/hooks/useFieldArray.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type { IForm } from "../logic/createForm";
88
import { IDefaultProp, ISchemaFieldCore } from "../types";
99
import { FormContext } from "../contexts/FormContext";
1010
import useSubscribeAndCompare from "./useSubscribeAndCompare";
11+
import generateId from "../utils/generateId";
1112

1213
// eslint-disable-next-line no-use-before-define
1314
export const useFieldArray = <TSchema extends ISchemaFieldCore>(props: {
@@ -20,6 +21,8 @@ export const useFieldArray = <TSchema extends ISchemaFieldCore>(props: {
2021
const { form = formContext, schema } = props as { form: IForm<TSchema>, schema: TSchema };
2122
const _ref = useRef<any>();
2223

24+
const identity = schema.config?.name || schema.key || generateId();
25+
2326
useSubscribeAndCompare({
2427
form,
2528
getState() {
@@ -40,11 +43,11 @@ export const useFieldArray = <TSchema extends ISchemaFieldCore>(props: {
4043
});
4144

4245
useEffect(() => {
43-
form.fieldRef[schema.config.name] = _ref;
46+
form.fieldRef[identity] = _ref;
4447
return () => {
45-
delete form.fieldRef[schema.config.name];
48+
delete form.fieldRef[identity];
4649
};
47-
}, [schema.config.name]);
50+
}, [identity]);
4851

4952
return {
5053
state: form.getSchemaFieldState<TSchema["initialValue"], TSchema["propStateType"] & IDefaultProp>(schema as any),
@@ -55,16 +58,16 @@ export const useFieldArray = <TSchema extends ISchemaFieldCore>(props: {
5558
onChange: useCallback(
5659
(arg: any) => {
5760
if (typeof arg === "function") {
58-
form.setValue(schema.config.name, arg(form.state.values));
61+
form.setValue(identity, arg(form.state.values));
5962
} else {
60-
form.setValue(schema.config.name, arg);
63+
form.setValue(identity, arg);
6164
}
6265
},
63-
[schema.config.name, form],
66+
[identity, form],
6467
),
6568
onBlur: useCallback(
66-
() => form.updateTouch(schema.config.name),
67-
[schema.config.name, form],
69+
() => form.updateTouch(identity),
70+
[identity, form],
6871
),
6972
};
7073
};

src/v2/hooks/useFieldForm.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import type { IEventCallback, IForm } from "../logic/createForm";
88
import { IDefaultProp, ISchemaFieldCore } from "../types";
99
import { FormContext } from "../contexts/FormContext";
1010
import useSubscribeAndCompare from "./useSubscribeAndCompare";
11+
import generateId from "../utils/generateId";
1112

1213
// eslint-disable-next-line no-use-before-define
1314
export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
@@ -20,6 +21,8 @@ export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
2021
const { form = formContext, schema } = props as { form: IForm<TSchema>, schema: TSchema };
2122
const _ref = useRef<any>();
2223

24+
const identity = schema.config?.name || schema.key || generateId();
25+
2326
useSubscribeAndCompare({
2427
form,
2528
getState() {
@@ -29,12 +32,12 @@ export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
2932
});
3033

3134
useEffect(() => {
32-
form.fieldRef[schema.config.name] = _ref;
35+
form.fieldRef[identity] = _ref;
3336
return () => {
34-
delete form.fieldRef[schema.config.name];
35-
form.unregisterEvent("submit", schema.config.name);
37+
delete form.fieldRef[identity];
38+
form.unregisterEvent("submit", identity);
3639
};
37-
}, [schema.config.name]);
40+
}, [identity]);
3841

3942
return {
4043
state: form.getSchemaFieldState<TSchema["initialValue"], TSchema["propStateType"] & IDefaultProp>(schema as any),
@@ -45,20 +48,20 @@ export const useFieldForm = <TSchema extends ISchemaFieldCore>(props: {
4548
onChange: useCallback(
4649
(arg: any) => {
4750
if (typeof arg === "function") {
48-
form.setValue(schema.config.name, arg(form.state.values));
51+
form.setValue(identity, arg(form.state.values));
4952
} else {
50-
form.setValue(schema.config.name, arg);
53+
form.setValue(identity, arg);
5154
}
5255
},
53-
[schema.config.name, form],
56+
[identity, form],
5457
),
5558
registerSubmit: useCallback(
56-
(callback: IEventCallback) => form.registerEvent("submit", schema.config.name as string, callback),
57-
[schema.config.name, form],
59+
(callback: IEventCallback) => form.registerEvent("submit", identity as string, callback),
60+
[identity, form],
5861
),
5962
onBlur: useCallback(
60-
() => form.updateTouch(schema.config.name),
61-
[schema.config.name, form],
63+
() => form.updateTouch(identity),
64+
[identity, form],
6265
),
6366
};
6467
};

src/v2/logic/createForm.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,12 @@ export const initializeState = {
103103
};
104104

105105
export function getSchemaKey(schema: ISchema, parent?: string) {
106-
return `${parent ? `${parent}.` : ""}${schema.config.name ?? schema.key}`;
106+
return `${parent ? `${parent}.` : ""}${schema.config?.name ?? schema.key}`;
107107
}
108108

109109
export function getSchemaName(schema: ISchema, parent?: string) {
110-
if (!schema.config.name) return "";
111-
return `${parent ? `${parent}.` : ""}${schema.config.name}`;
110+
if (!schema.config?.name) return "";
111+
return `${parent ? `${parent}.` : ""}${schema.config?.name}`;
112112
}
113113

114114
const createForm = <TSchema>(props: ICreateFormProps<TSchema>) => {

0 commit comments

Comments
 (0)