-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTest.tsx
More file actions
125 lines (113 loc) · 2.77 KB
/
Copy pathTest.tsx
File metadata and controls
125 lines (113 loc) · 2.77 KB
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
import * as React from 'react'
import withForm, { ComputedFormState } from './src/withForm'
interface TestFormProps extends ComputedFormState {}
class TestForm extends React.Component<TestFormProps, any> {
render() {
const { fields, form } = this.props
return <input {...fields.firstName.handlers} {...fields.firstName.state} {...fields.firstName.props} />
}
}
export default withForm({
fields: {
firstName: {
props: {
label: 'First name'
},
},
lastName: {
props: {
label: 'Last name'
},
},
fullName: {
props: {
label: 'Full name'
},
computed: {
read: (fields) => fields.firstName.value + ' ' + fields.lastName.value,
write: (value: string) => {
const split = value.split(' ')
return {
firstName: split[0],
lastName: split[1]
}
}
},
validators: [
(field, fields, props) => {
if (field.value.length < 3) {
return {
isValid: false,
message: 'First name must be at least 3 characters'
}
}
return { isValid: true }
}
],
initialValue: ''
}
},
formHasFinishedLoadingWhen: props => !props.user.isFetching && props.refData.hasLoaded,
mapPropsToFields: props => ({
// called once formHasFinishedLoadingWhen returns true
firstName: props.user.firstName
// ...
}),
formIsSubmittingWhen: props => props.user.submitting,
onSubmit: (formItem, props) => {
// available on your component via this.props.form.onSubmit
if (props.someResourceId) props.updateSomeResource(props.someResourceId, formItem)
else props.updateSomeResource(formItem)
},
mapPropsToErrors: props => ({
firstName: props.errors.firstName // must be an array of strings for each field
// ...
}),
resetFormWhen: (props, nextProps) => {
return false
}
})(TestForm)
export const Input = ({
reff,
label = '',
name,
placeholder,
onChange = () => {},
isDirty,
value,
disabled = false,
className,
errors = [],
isValid = true,
messages,
touched = false,
didBlur = false,
onBlur = () => false,
showMessages = messages.length > 0 && didBlur && touched,
originalValue,
required,
...props
}) => (
<div>
<label htmlFor={name} className="control-label">
{label}
</label>
<input
name={name}
className="form-control"
ref={reff}
disabled={disabled}
placeholder={placeholder}
onChange={onChange}
value={value}
aria-describedby={name}
onBlur={onBlur}
{...props}
/>
{showMessages && (
<span id={name} style={{ fontSize: 10, color: 'red' }}>
{messages[0]}
</span>
)}
</div>
)