@@ -44,9 +44,17 @@ export type Deserializer<T extends object, K extends keyof T, State = DefaultSta
44
44
props : FormInputProps < T , K , State , Error >
45
45
) => T [ K ] | T [ K ] [ keyof T [ K ] ] ;
46
46
47
- function defaultSerializer < T extends object , K extends keyof T , State = DefaultState , Error extends string = string > (
47
+ export type SerializeProps < T extends object , K extends keyof T > = {
48
+ dateAsNumber ?: boolean ;
49
+ setUndefinedOnUncheck ?: boolean ;
50
+ setNullOnUncheck ?: boolean ;
51
+ type ?: FormInputType ;
52
+ value ?: T [ K ] | T [ K ] [ keyof T [ K ] ] ;
53
+ } ;
54
+
55
+ export function defaultSerializer < T extends object , K extends keyof T > (
48
56
currentValue : T [ K ] | T [ K ] [ keyof T [ K ] ] ,
49
- props : FormInputProps < T , K , State , Error >
57
+ props : SerializeProps < T , K >
50
58
) : boolean | string {
51
59
switch ( props . type ) {
52
60
case "datetime-local" :
@@ -84,11 +92,11 @@ function defaultSerializer<T extends object, K extends keyof T, State = DefaultS
84
92
}
85
93
}
86
94
87
- function defaultDeserializer < T extends object , K extends keyof T , State = DefaultState , Error extends string = string > (
95
+ export function defaultDeserializer < T extends object , K extends keyof T > (
88
96
inputValue : string ,
89
97
inputChecked : boolean ,
90
- currentValue : any ,
91
- props : FormInputProps < T , K , State , Error >
98
+ currentValue : T [ K ] ,
99
+ props : SerializeProps < T , K >
92
100
) {
93
101
switch ( props . type ) {
94
102
case "number" : {
@@ -148,11 +156,8 @@ export type FormInputProps<T extends object, K extends keyof T = keyof T, State
148
156
dirtyClassName ?: string ;
149
157
dirtyStyle ?: React . CSSProperties ;
150
158
disableOnSubmitting ?: boolean ;
151
- dateAsNumber ?: boolean ;
152
- setNullOnUncheck ?: boolean ;
153
- setUndefinedOnUncheck ?: boolean ;
154
159
hideWhenNull ?: boolean ;
155
- } ;
160
+ } & SerializeProps < T , K > ;
156
161
157
162
/**
158
163
* The builtin form input. You must always specify **form** and **name**. Use the **type** prop to specify what type of field it represents.
@@ -209,7 +214,7 @@ export function FormInput<T extends object, K extends keyof T, State extends Def
209
214
onChange = { ( ev ) => {
210
215
setValue ( ( deserializer ?? defaultDeserializer ) ( ev . target . value , ev . target . checked , currentValue , props ) ) ;
211
216
} }
212
- name = { name + "" }
217
+ name = { name as string }
213
218
type = { type }
214
219
{ ...rest }
215
220
/>
0 commit comments