-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathForm.fs
172 lines (149 loc) · 9.89 KB
/
Form.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
namespace Fable.Builders.AntDesign
open Fable.Builders.AntDesign
open Fable.Builders.Common
open Fable.Builders.AntDesign.Grid
open Fable.Core
open Fable.React
open Fable.Core.JS
open Fable.Core.JsInterop
open System
[<AutoOpen>]
module Form =
type Browser.Types.Event with
member this.Value = (this.target :?> Browser.Types.HTMLInputElement).value
[<StringEnum; RequireQualifiedAccess>]
type FormValidationStatus =
| Success
| Warning
| Error
| Validating
[<StringEnum; RequireQualifiedAccess>]
type FormLabelAlign =
| Left
| Right
[<StringEnum; RequireQualifiedAccess>]
type FormRuleType =
| String
| Number
| Boolean
| Method
| Regexp
| Integer
| Float
| Array
| Object
| Enum
| Date
| Url
| Hex
| Email
| Any
[<StringEnum; RequireQualifiedAccess>]
type FormLayout =
| Horizontal
| Vertical
| Inline
type FormFieldData =
{ touched: bool
validating: bool
errors: string array
name: string array
value: string }
type IFieldError =
abstract name: string
abstract errors: string array
type IFormInstance =
abstract getFieldError: string -> string array
abstract getFieldInstance: string -> 'TInstance
abstract getFieldsError: string array -> IFieldError array
abstract getFieldsValue: Func<string array, {| touched: bool; validating: bool |} -> bool> -> 'TValue
abstract getFieldValue: string -> obj
abstract isFieldsTouched: Func<string array, bool> -> bool
abstract isFieldTouched: string -> bool
abstract isFieldValidating: string -> bool
abstract resetFields: string array -> unit
abstract scrollToField: Func<string, 'TScrollOptions, unit> -> unit
abstract setFields: FormFieldData array -> unit
abstract setFieldsValue: 'TValue array -> unit
abstract submit: unit -> unit
abstract validateFields: string array -> Async<unit>
[<Import("Form.useForm", "antd")>]
let private useFormInternal: unit -> IFormInstance array = jsNative
let useForm () = useFormInternal() |> Array.head
[<RequireQualifiedAccess>]
type FormRule =
| Enum of string array
| Len of int
| Max of int
| Message of string
| Min of int
| Pattern of string
| Required of bool
| Transform of (string -> string)
| RuleType of FormRuleType
| Validator of Func<obj, string, Promise<string>>
| Whitespace of bool
| ValidateTrigger of string array
type FormBuilder<'T>() =
inherit ReactBuilder(import "Form" "antd")
[<CustomOperation("colon")>] member inline _.colon (x: DSLElement, v: bool) = x.attr "colon" v
[<CustomOperation("component")>] member inline _.``component`` (x: DSLElement, v: ReactElement) = x.attr "component" v
[<CustomOperation("fields")>] member inline _.fields (x: DSLElement, v: FormFieldData array) = x.attr "fields" v
[<CustomOperation("form")>] member inline _.form (x: DSLElement, v: IFormInstance) = x.attr "form" v
[<CustomOperation("initialValues")>] member inline _.initialValues (x: DSLElement, v: 'T) = x.attr "initialValues" v
[<CustomOperation("labelAlign")>] member inline _.labelAlign (x: DSLElement, v: FormLabelAlign) = x.attr "labelAlign" v
[<CustomOperation("labelCol")>] member inline _.labelCol (x: DSLElement, v: ColProp list) = x.attr "labelCol" (keyValueList CaseRules.LowerFirst v)
[<CustomOperation("layout")>] member inline _.layout (x: DSLElement, v: FormLayout) = x.attr "layout" v
[<CustomOperation("name")>] member inline _.name (x: DSLElement, v: string) = x.attr "name" v
[<CustomOperation("preserve")>] member inline _.preserve (x: DSLElement, v: bool) = x.attr "preserve" v
[<CustomOperation("requiredMark")>] member inline _.requiredMark (x: DSLElement, v: bool) = x.attr "requiredMark" v
[<CustomOperation("scrollToFirstError")>] member inline _.scrollToFirstError (x: DSLElement, v: bool) = x.attr "scrollToFirstError" v
[<CustomOperation("size")>] member inline _.size (x: DSLElement, v: Size) = x.attr "size" v
[<CustomOperation("validateMessages")>] member inline _.validateMessages (x: DSLElement, v: obj) = x.attr "validateMessages" v
[<CustomOperation("validateTrigger")>] member inline _.validateTrigger (x: DSLElement, v: string array) = x.attr "validateTrigger" v
[<CustomOperation("wrapperCol")>] member inline _.wrapperCol (x: DSLElement, v: ColProp list) = x.attr "wrapperCol" (keyValueList CaseRules.LowerFirst v)
[<CustomOperation("onFieldsChange")>] member inline _.onFieldsChange (x: DSLElement, v: Func<FormFieldData array, FormFieldData array, unit>) = x.attr "onFieldsChange" v
[<CustomOperation("onFinish")>] member inline _.onFinish (x: DSLElement, v: 'T -> unit) = x.attr "onFinish" v
[<CustomOperation("onFinishFailed")>] member inline _.onFinishFailed (x: DSLElement, v: {| values: 'T; errorFields: string array; outOfDate: string array |} -> unit) = x.attr "onFinishFailed" v
[<CustomOperation("onValuesChange")>] member inline _.onValuesChange (x: DSLElement, v: Func<'T, 'T, unit>) = x.attr "onValuesChange" v
type FormItemBuilder() =
inherit ReactBuilder(import "Form.Item" "antd")
[<CustomOperation("colon")>] member inline _.colon (x: DSLElement, v: bool) = x.attr "colon" v
[<CustomOperation("dependencies")>] member inline _.dependencies (x: DSLElement, v: string array) = x.attr "dependencies" v
[<CustomOperation("extra")>] member inline _.extra (x: DSLElement, v: ReactElement) = x.attr "extra" v
[<CustomOperation("getValueFromEvent")>] member inline _.getValueFromEvent (x: DSLElement, v: Func<obj array, obj>) = x.attr "getValueFromEvent" v
[<CustomOperation("getValueProps")>] member inline _.getValueProps (x: DSLElement, v: Func<obj, obj>) = x.attr "getValueProps" v
[<CustomOperation("hasFeedback")>] member inline _.hasFeedback (x: DSLElement, v: bool) = x.attr "hasFeedback" v
[<CustomOperation("help")>] member inline _.help (x: DSLElement, v: ReactElement) = x.attr "help" v
[<CustomOperation("hidden")>] member inline _.hidden (x: DSLElement, v: bool) = x.attr "hidden" v
[<CustomOperation("htmlFor")>] member inline _.htmlFor (x: DSLElement, v: string) = x.attr "htmlFor" v
[<CustomOperation("initialValue")>] member inline _.initialValue (x: DSLElement, v: string) = x.attr "initialValue" v
[<CustomOperation("label")>] member inline _.label (x: DSLElement, v: ReactElement) = x.attr "label" v
[<CustomOperation("labelAlign")>] member inline _.labelAlign (x: DSLElement, v: FormLabelAlign) = x.attr "labelAlign" v
[<CustomOperation("labelCol")>] member inline _.labelCol (x: DSLElement, v: obj) = x.attr "labelCol" v
[<CustomOperation("messageVariables")>] member inline _.messageVariables (x: DSLElement, v) = x.attr "messageVariables" v
[<CustomOperation("name")>] member inline _.name (x: DSLElement, v: string) = x.attr "name" v
[<CustomOperation("normalize")>] member inline _.normalize (x: DSLElement, v: Func<string, string, string array, string>) = x.attr "normalize" v
[<CustomOperation("noStyle")>] member inline _.noStyle (x: DSLElement, v: bool) = x.attr "noStyle" v
[<CustomOperation("preserve")>] member inline _.preserve (x: DSLElement, v: bool) = x.attr "preserve" v
[<CustomOperation("required")>] member inline _.required (x: DSLElement, v: bool) = x.attr "required" v
[<CustomOperation("rules")>] member inline _.rules (x: DSLElement, v: FormRule list list) = x.attr "rules" (v |> List.map (keyValueList CaseRules.LowerFirst) |> List.toArray)
[<CustomOperation("shouldUpdate")>] member inline _.shouldUpdate (x: DSLElement, v: Func<string, string, bool>) = x.attr "shouldUpdate" v
[<CustomOperation("trigger")>] member inline _.trigger (x: DSLElement, v: string) = x.attr "trigger" v
[<CustomOperation("validateFirst")>] member inline _.validateFirst (x: DSLElement, v: bool) = x.attr "validateFirst" v
[<CustomOperation("validateStatus")>] member inline _.validateStatus (x: DSLElement, v: FormValidationStatus) = x.attr "validateStatus" v
[<CustomOperation("validateTrigger")>] member inline _.validateTrigger (x: DSLElement, v: string array) = x.attr "validateTrigger" v
[<CustomOperation("valuePropName")>] member inline _.valuePropName (x: DSLElement, v: string) = x.attr "valuePropName" v
[<CustomOperation("wrapperCol")>] member inline _.wrapperCol (x: DSLElement, v: obj) = x.attr "wrapperCol" v
type FormListBuilder() =
inherit ReactBuilder(import "Form.List" "antd")
[<CustomOperation("initialValue")>] member inline _.initialValue (x: DSLElement, v: string) = x.attr "initialValue" v
[<CustomOperation("name")>] member inline _.name (x: DSLElement, v: string) = x.attr "name" v
[<CustomOperation("rules")>] member inline _.rules (x: DSLElement, v: FormRule list list) = x.attr "rules" (v |> List.map (keyValueList CaseRules.LowerFirst) |> List.toArray)
type FormErrorListBuilder() =
inherit ReactBuilder(import "Form.ErrorList" "antd")
[<CustomOperation("errors")>] member inline _.errors (x: DSLElement, v: ReactElement array) = x.attr "errors" v
type FormProviderBuilder() =
inherit ReactBuilder(import "Form.Provider" "antd")
[<CustomOperation("onFormChange")>] member inline _.onFormChange (x: DSLElement, v: Func<string, obj, unit>) = x.attr "onFormChange" v
[<CustomOperation("onFormFinish")>] member inline _.onFormFinish (x: DSLElement, v: Func<string, obj, unit>) = x.attr "onFormFinish" v