-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMyForm.tsx
127 lines (123 loc) · 3.9 KB
/
MyForm.tsx
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
import React, { ReactElement } from "react";
import { Formik, Form, FieldArray, Field } from "formik";
import * as yup from "yup";
import {
Table,
TableCell,
TableRow,
TableBody,
TableHead,
Grid,
Paper,
Button
} from "@material-ui/core";
import {
MyCheckbox,
MyDatePicker,
MySelect,
MyTextField
} from "./FormComponents";
import "react-datasheet/lib/react-datasheet.css";
import "react-datepicker/dist/react-datepicker.css";
export const MyContainer: React.SFC<ReactElement> = ({ children }) => {
return (
<Grid container direction="row" justify="center" alignItems="center">
<Paper>{children}</Paper>
</Grid>
);
};
interface IMyForm {
data: Array<Array<{ value: boolean | number | Date }>>;
handleSubmit: ({}) => void;
}
export const MyForm: React.SFC<IMyForm> = ({ data, handleSubmit }) => {
const x = Object.keys(data).reduce((acc, row) => {
return {
...acc,
[row]: yup.array().of(
yup.object().shape({
value:
//yup.number().required("numbers only"),
yup
.number()
.typeError("Numbers please")
.required("must enter a number")
})
)
};
}, {});
return (
<Formik
initialValues={data.reduce((obj: {}, curr, i) => {
return { ...obj, [`row${i}`]: curr };
}, {})}
onSubmit={handleSubmit}
validateOnBlur
validationSchema={yup.object().shape(x)}
>
{({ values }) => {
return (
<Form>
<Table>
<TableHead>
<TableRow key={"header"}>
<TableCell>Enabled</TableCell>
<TableCell>ABC</TableCell>
<TableCell>DEF</TableCell>
<TableCell>GHI</TableCell>
</TableRow>
</TableHead>
<TableBody>
{Object.keys(values).map(key => {
return (
<FieldArray name={key}>
{({ name }) => {
return (
<TableRow key={name}>
<TableCell key={`${name}[0]`}>
<Field
name={`${name}[0].value`}
component={MyCheckbox}
/>
</TableCell>
<TableCell key={`${name}[1]`}>
<Field
name={`${name}[1].value`}
component={MyTextField}
/>
</TableCell>
<TableCell key={`${name}[2]`}>
<Field
name={`${name}[2].value`}
component={MySelect}
/>
</TableCell>
<TableCell key={`${name}[3]`}>
<Field
name={`${name}[3].value`}
component={MyDatePicker}
/>
</TableCell>
{/* {values[name].map((value, index) => (
<TableCell key={`${name}[${index}]`}>
<Field
name={`${name}[${index}].value`}
component={MyTextField}
/>
</TableCell>
))} */}
</TableRow>
);
}}
</FieldArray>
);
})}
</TableBody>
</Table>
<Button type="submit">Submit</Button>
</Form>
);
}}
</Formik>
);
};