Skip to content

Commit 179c1ef

Browse files
committed
add validate
1 parent 3534e8b commit 179c1ef

21 files changed

Lines changed: 129 additions & 45 deletions

File tree

apps/app-mobile/src/App.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {createAntdForm, FormAntdView} from "@coding-form/form-antd-mobile";
1+
import {useForm, FormAntdView} from "@coding-form/form-antd-mobile";
22
import type {FormMeta} from "@coding-form/form-types";
33
import {Button, Space} from "antd-mobile";
44

@@ -21,13 +21,24 @@ const App = () => {
2121
subForms: []
2222
}
2323

24-
const form = createAntdForm();
24+
const form = useForm();
2525

2626
return (
2727
<div>
2828
<FormAntdView
2929
meta={meta}
3030
form={form}
31+
validators={[
32+
{
33+
code:'name',
34+
validator:(value,instance)=>{
35+
if(value){
36+
return true;
37+
}
38+
return '你可真行'
39+
}
40+
}
41+
]}
3142
/>
3243

3344
<Space>

apps/app-pc/src/App.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import {createAntdForm, FormAntdView} from "@coding-form/form-antd";
1+
import { FormAntdView} from "@coding-form/form-antd";
22
import type {FormMeta} from "@coding-form/form-types";
33
import {Button, Space} from "antd";
4+
import {useForm} from "@coding-form/form-antd";
45

56
const App = () => {
67

@@ -21,13 +22,24 @@ const App = () => {
2122
subForms: []
2223
}
2324

24-
const form = createAntdForm();
25+
const form = useForm();
2526

2627
return (
2728
<div>
2829
<FormAntdView
2930
meta={meta}
3031
form={form}
32+
validators={[
33+
{
34+
code:'name',
35+
validator:(value,instance)=>{
36+
if(value){
37+
return true;
38+
}
39+
return '你可真行'
40+
}
41+
}
42+
]}
3143
/>
3244

3345
<Space>

packages/form-antd-mobile/src/components/string/index.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
import {Form, Input} from "antd-mobile";
22
import React from "react";
33
import {FormItemProps} from "@/types/item";
4+
import {useFormContext} from "@coding-form/form-presenter";
45

56
export const FormString: React.FC<FormItemProps> = (props) => {
67

8+
const context = useFormContext();
9+
10+
const rules = context.validate.getValidatorRules(props.code);
11+
712
return (
813
<Form.Item
914
name={props.code}
1015
key={props.code}
1116
label={props.name}
1217
required={props.required}
1318
hidden={props.hidden}
19+
rules={rules}
1420
>
1521
<Input placeholder={props.placeholder}/>
1622
</Form.Item>

packages/form-antd-mobile/src/form/index.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import {FormViewProps} from "@coding-form/form-types";
3-
import {FormInstance, FormInstanceContext} from "@coding-form/form-presenter";
3+
import {FormContext, FormInstance, FormValidate} from "@coding-form/form-presenter";
44
import {Form} from "antd-mobile";
55
import {FormItemProps} from "@/types/item";
66
import {FormFactory} from "@/factory";
@@ -9,11 +9,12 @@ export const FormAntdView: React.FC<FormViewProps> = (props) => {
99

1010
const [form] = Form.useForm();
1111

12-
const instance = React.useMemo(() => {
13-
if (props.form) {
14-
return props.form as FormInstance;
15-
} else {
16-
return new FormInstance(form);
12+
const context = React.useMemo(() => {
13+
const instance = props.form ? props.form as FormInstance : new FormInstance(form);
14+
15+
return {
16+
instance,
17+
validate: new FormValidate(props.validators || [],instance),
1718
}
1819
}, [props.form]);
1920

@@ -22,9 +23,9 @@ export const FormAntdView: React.FC<FormViewProps> = (props) => {
2223
const review = props.review || false;
2324

2425
return (
25-
<FormInstanceContext.Provider value={instance}>
26+
<FormContext.Provider value={context}>
2627
<Form
27-
form={instance.getProxyTarget()}
28+
form={form}
2829
>
2930
{fields.map(field => {
3031

@@ -41,6 +42,6 @@ export const FormAntdView: React.FC<FormViewProps> = (props) => {
4142
}
4243
})}
4344
</Form>
44-
</FormInstanceContext.Provider>
45+
</FormContext.Provider>
4546
)
4647
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./create-antd-form";
1+
export * from "./use-form";

packages/form-antd-mobile/src/hooks/create-antd-form.tsx renamed to packages/form-antd-mobile/src/hooks/use-form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {Form} from "antd-mobile";
22
import {FormInstance} from "@coding-form/form-presenter";
33
import React from "react";
44

5-
export const createAntdForm = () => {
5+
export const useForm = () => {
66
const [form] = Form.useForm();
77
return React.useMemo(()=>{
88
return new FormInstance(form);

packages/form-antd/src/components/string/index.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
import {Form, Input} from "antd";
22
import React from "react";
33
import {FormItemProps} from "@/types/item";
4+
import {useFormContext} from "@coding-form/form-presenter";
45

56
export const FormString: React.FC<FormItemProps> = (props) => {
67

8+
const context = useFormContext();
9+
10+
const rules = context.validate.getValidatorRules(props.code);
11+
712
return (
813
<Form.Item
914
name={props.code}
1015
key={props.code}
1116
label={props.name}
1217
required={props.required}
1318
hidden={props.hidden}
19+
rules={rules}
1420
>
1521
<Input placeholder={props.placeholder}/>
1622
</Form.Item>

packages/form-antd/src/form/index.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from "react";
22
import {FormViewProps} from "@coding-form/form-types";
3-
import {FormInstance, FormInstanceContext} from "@coding-form/form-presenter";
3+
import {FormContext, FormInstance, FormValidate} from "@coding-form/form-presenter";
44
import {Form} from "antd";
55
import {FormItemProps} from "@/types/item";
66
import {FormFactory} from "@/factory";
@@ -9,11 +9,12 @@ export const FormAntdView: React.FC<FormViewProps> = (props) => {
99

1010
const [form] = Form.useForm();
1111

12-
const instance = React.useMemo(() => {
13-
if (props.form) {
14-
return props.form as FormInstance;
15-
} else {
16-
return new FormInstance(form);
12+
const context = React.useMemo(() => {
13+
const instance = props.form ? props.form as FormInstance : new FormInstance(form);
14+
15+
return {
16+
instance,
17+
validate: new FormValidate(props.validators || [],instance)
1718
}
1819
}, [props.form]);
1920

@@ -22,9 +23,9 @@ export const FormAntdView: React.FC<FormViewProps> = (props) => {
2223
const review = props.review || false;
2324

2425
return (
25-
<FormInstanceContext.Provider value={instance}>
26+
<FormContext.Provider value={context}>
2627
<Form
27-
form={instance.getProxyTarget()}
28+
form={form}
2829
>
2930
{fields.map(field => {
3031

@@ -41,6 +42,6 @@ export const FormAntdView: React.FC<FormViewProps> = (props) => {
4142
}
4243
})}
4344
</Form>
44-
</FormInstanceContext.Provider>
45+
</FormContext.Provider>
4546
)
4647
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export * from "./create-antd-form";
1+
export * from "./use-form";

packages/form-antd/src/hooks/create-antd-form.tsx renamed to packages/form-antd/src/hooks/use-form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {Form} from "antd";
22
import {FormInstance} from "@coding-form/form-presenter";
33
import React from "react";
44

5-
export const createAntdForm = () => {
5+
export const useForm = () => {
66
const [form] = Form.useForm();
77
return React.useMemo(()=>{
88
return new FormInstance(form);

0 commit comments

Comments
 (0)