Skip to content

Commit b09e0d4

Browse files
committed
add event
1 parent bf2c016 commit b09e0d4

8 files changed

Lines changed: 83 additions & 58 deletions

File tree

apps/app-mobile/src/components/string/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export const FormString: React.FC<FormItemProps> = (props) => {
1818
onChange={(event)=>{
1919
props.onChange?.(event);
2020
}}
21+
onBlur={(event)=>{
22+
props.onBlur?.(event.target.value);
23+
}}
2124
/>
2225
</Form.Item>
2326
)

apps/app-pc/src/components/string/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export const FormString: React.FC<FormItemProps> = (props) => {
1818
onChange={(event)=>{
1919
props.onChange?.(event.target.value);
2020
}}
21+
onBlur={(event)=>{
22+
props.onBlur?.(event.target.value);
23+
}}
2124
/>
2225
</Form.Item>
2326
)

apps/app-pc/src/pages/home.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {createFormInstance, FormView} from "@coding-form/form-view";
22
import type {FormMeta} from "@coding-form/form-view";
33
import {Button, Space} from "antd";
4-
import type {OnChangeEvent} from "@coding-form/form-view";
54

65
const HomePage = () => {
76

@@ -42,11 +41,12 @@ const HomePage = () => {
4241
]}
4342
events={[
4443
{
44+
type: 'change',
4545
target:'name',
4646
event:(value)=>{
4747
console.log('value',value)
4848
}
49-
} as OnChangeEvent
49+
}
5050
]}
5151
/>
5252

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,66 @@
11
import {FieldKey, FormEvent} from "@/types";
22

3-
export class EventContext{
3+
export class EventContext {
44

5-
private readonly events:FormEvent[];
5+
private readonly events: FormEvent[];
66

7-
constructor(events:FormEvent[]){
7+
constructor(events: FormEvent[]) {
88
this.events = events;
99
}
1010

11+
public handlerOnChange(target: FieldKey, value: any) {
12+
const events = this.getEvents('change', target);
13+
if (events && events.length > 0) {
14+
for (const event of events) {
15+
event.event(value);
16+
}
17+
}
18+
}
1119

12-
public handlerOnChange(target:FieldKey,value:string){
13-
const event = this.getEvent(target);
14-
if(event){
1520

21+
public handlerOnBlur(target: FieldKey,value:any) {
22+
const events = this.getEvents('blur', target);
23+
if (events && events.length > 0) {
24+
for (const event of events) {
25+
event.event(value);
26+
}
1627
}
1728
}
1829

19-
private getEvent(target:FieldKey){
20-
for(let event of this.events){
21-
console.log(typeof event)
30+
public getLoadEvents(): FormEvent[] {
31+
return this.getEvents('load');
32+
}
33+
34+
35+
private getEvents(type: string, target?: FieldKey) {
36+
const events = [];
37+
for (const event of this.events) {
38+
if (event.type == type) {
39+
const eventTarget = event.target;
40+
41+
if (target === eventTarget) {
42+
events.push(event)
43+
}
44+
if (typeof target !== 'string' && typeof eventTarget === 'string') {
45+
if (target?.fieldCode === eventTarget) {
46+
events.push(event)
47+
}
48+
}
49+
50+
if (typeof target === 'string' && typeof eventTarget !== 'string') {
51+
if (!eventTarget?.formCode && eventTarget?.fieldCode === target) {
52+
events.push(event)
53+
}
54+
}
55+
56+
if (typeof target !== 'string' && typeof eventTarget !== 'string') {
57+
if (eventTarget?.fieldCode === target?.fieldCode && eventTarget?.formCode === target?.formCode) {
58+
events.push(event)
59+
}
60+
}
61+
}
2262
}
23-
return null;
63+
return events;
2464
}
2565

2666
}

packages/form-view/src/factory/index.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from "react";
22
import {FormItemProps} from "@/types/item";
33
import {FormField} from "@/types";
44
import {FormContextScope} from "@/context";
5+
import {value} from "happy-dom/lib/PropertySymbol";
56

67
export class FormItemFactory {
78

@@ -44,12 +45,15 @@ export class FormItemFactory {
4445
fieldCode:formField.code,
4546
}
4647

47-
const handlerOnChange = (value:string)=>{
48+
const handlerOnChange = (value:any)=>{
4849
formItemProps.onChange?.(value);
4950
eventContext.handlerOnChange(fieldKey, value);
5051
}
5152

52-
53+
const handlerOnBlur = (value:any) => {
54+
formItemProps.onBlur?.(value);
55+
eventContext.handlerOnBlur(fieldKey,value);
56+
}
5357

5458
if (FormItem) {
5559
const rules = context.getValidate().getValidatorRules(fieldKey);
@@ -58,6 +62,7 @@ export class FormItemFactory {
5862
{...formItemProps}
5963
rules={rules}
6064
onChange={handlerOnChange}
65+
onBlur={handlerOnBlur}
6166
/>
6267
)
6368
}

packages/form-view/src/form/sub-view.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@ export const FormSubView:React.FC<FormSubViewProps> = (props)=>{
2222

2323
const formTarget = formControl?.getProxyTarget();
2424

25+
26+
React.useEffect(()=>{
27+
const events = context.getEventContext().getLoadEvents();
28+
if (events && events.length > 0) {
29+
for (const event of events) {
30+
event.event();
31+
}
32+
}
33+
},[]);
34+
35+
2536
return (
2637
<Form
2738
form={formTarget}

packages/form-view/src/types/event.ts

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,15 @@ import {FieldKey} from "@/types";
55
*/
66
export interface FormEvent {
77

8-
}
9-
10-
11-
/**
12-
* 初始化加载事件
13-
*/
14-
export interface OnLoadEvent extends FormEvent {
15-
16-
/**
17-
* 事件定义
18-
*/
19-
event:()=>void;
20-
21-
}
22-
23-
/**
24-
* 失去焦点事件
25-
*/
26-
export interface OnBlurEvent extends FormEvent {
27-
28-
/**
29-
* 作用对象
30-
*/
31-
target:FieldKey;
8+
// 事件类型
9+
type:'load'|'change'|'blur';
3210

33-
/**
34-
* 事件定义
35-
*/
36-
event:()=>void;
37-
38-
}
39-
40-
41-
/**
42-
* 值变更事件
43-
*/
44-
export interface OnChangeEvent extends FormEvent {
11+
// 作用对象
12+
target?:FieldKey;
4513

46-
/**
47-
* 作用对象
48-
*/
49-
target:FieldKey;
14+
// 事件触发
15+
event:(value?:any)=>void;
5016

51-
/**
52-
* 事件定义
53-
*/
54-
event:(value:any)=>void;
5517
}
5618

5719

packages/form-view/src/types/item.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export interface FormItemProps{
66
defaultValue?: string;
77
value?: string;
88
onChange?: (value: string) => void;
9+
onBlur?: (value: string) => void;
910
placeholder?:string;
1011
readOnly?:boolean;
1112
rules?:any[];

0 commit comments

Comments
 (0)