@@ -6,65 +6,72 @@ import './App.css';
6
6
class App extends React . Component {
7
7
state = {
8
8
data : [ ] ,
9
- model : [
10
- { key : 'name' , label : 'Name' , props : { required : true } } ,
11
- { key : 'age' , label : 'Age' , type : 'number' } ,
12
- {
13
- key : 'rating' ,
14
- label : 'Rating' ,
15
- type : 'number' ,
16
- props : { min : 0 , max : 5 }
17
- } ,
18
- {
19
- key : 'gender' ,
20
- label : 'Gender' ,
21
- type : 'radio' ,
22
- options : [
23
- {
24
- key : 'male' ,
25
- label : 'Male' ,
26
- name : 'gender' ,
27
- value : 'male'
28
- } ,
29
- {
30
- key : 'female' ,
31
- label : 'Female' ,
32
- name : 'gender' ,
33
- value : 'female'
34
- }
35
- ]
36
- } ,
37
- { key : 'qualification' , label : 'Qualification' } ,
38
- {
39
- key : 'city' ,
40
- label : 'City' ,
41
- type : 'select' ,
42
- value : 'Kerala' ,
43
- props : { required : true } ,
44
- options : [
45
- { key : '_placeholder' , label : 'Select a city' , value : '' } ,
46
- { key : 'mumbai' , label : 'Mumbai' , value : 'Mumbai' } ,
47
- {
48
- key : 'bangalore' ,
49
- label : 'Bangalore' ,
50
- value : 'Bangalore'
51
- } ,
52
- { key : 'kerala' , label : 'Kerala' , value : 'Kerala' }
53
- ]
54
- } ,
55
- {
56
- key : 'skills' ,
57
- label : 'Skills' ,
58
- type : 'checkbox' ,
59
- options : [
60
- { key : 'reactjs' , label : 'ReactJS' , value : 'reactjs' } ,
61
- { key : 'angular' , label : 'Angular' , value : 'angular' } ,
62
- { key : 'vuejs' , label : 'VueJS' , value : 'vuejs' }
63
- ]
64
- }
65
- ]
9
+ model : JSON . stringify (
10
+ [
11
+ { key : 'name' , label : 'Name' , props : { required : true } } ,
12
+ { key : 'age' , label : 'Age' , type : 'number' } ,
13
+ {
14
+ key : 'rating' ,
15
+ label : 'Rating' ,
16
+ type : 'number' ,
17
+ props : { min : 0 , max : 5 }
18
+ } ,
19
+ {
20
+ key : 'gender' ,
21
+ label : 'Gender' ,
22
+ type : 'radio' ,
23
+ options : [
24
+ {
25
+ key : 'male' ,
26
+ label : 'Male' ,
27
+ name : 'gender' ,
28
+ value : 'male'
29
+ } ,
30
+ {
31
+ key : 'female' ,
32
+ label : 'Female' ,
33
+ name : 'gender' ,
34
+ value : 'female'
35
+ }
36
+ ]
37
+ } ,
38
+ { key : 'qualification' , label : 'Qualification' } ,
39
+ {
40
+ key : 'city' ,
41
+ label : 'City' ,
42
+ type : 'select' ,
43
+ value : 'Kerala' ,
44
+ props : { required : true } ,
45
+ options : [
46
+ { key : '_placeholder' , label : 'Select a city' , value : '' } ,
47
+ { key : 'mumbai' , label : 'Mumbai' , value : 'Mumbai' } ,
48
+ {
49
+ key : 'bangalore' ,
50
+ label : 'Bangalore' ,
51
+ value : 'Bangalore'
52
+ } ,
53
+ { key : 'kerala' , label : 'Kerala' , value : 'Kerala' }
54
+ ]
55
+ } ,
56
+ {
57
+ key : 'skills' ,
58
+ label : 'Skills' ,
59
+ type : 'checkbox' ,
60
+ options : [
61
+ { key : 'reactjs' , label : 'ReactJS' , value : 'reactjs' } ,
62
+ { key : 'angular' , label : 'Angular' , value : 'angular' } ,
63
+ { key : 'vuejs' , label : 'VueJS' , value : 'vuejs' }
64
+ ]
65
+ }
66
+ ] ,
67
+ null ,
68
+ 2
69
+ )
66
70
} ;
67
71
72
+ handleModel = e => {
73
+ this . setState ( { model : e . target . value } ) ;
74
+ } ;
68
75
onSubmit = model => {
69
76
let data = [ ] ;
70
77
if ( model . id ) {
@@ -91,17 +98,48 @@ class App extends React.Component {
91
98
} ) ;
92
99
} ;
93
100
101
+ renderTableHead = ( ) => {
102
+ console . log ( this . state . data ) ;
103
+ if ( ! this . state . data [ 0 ] ) {
104
+ return < td > No Data!</ td > ;
105
+ }
106
+ let dataHead = Object . keys ( this . state . data [ 0 ] ) ;
107
+ return dataHead . map ( d => {
108
+ return < td key = { 'th_' + d } > { d } </ td > ;
109
+ } ) ;
110
+ } ;
111
+ renderRow = r => {
112
+ return Object . keys ( r ) . map ( p => < td key = { 'td_' + p } > { r [ p ] } </ td > ) ;
113
+ } ;
114
+
115
+ renderForm = ( ) => {
116
+ try {
117
+ return (
118
+ < DynamicForm
119
+ title = "Registration"
120
+ defaultValues = { this . state . currentRecord }
121
+ model = { JSON . parse ( this . state . model ) }
122
+ onSubmit = { model => {
123
+ this . onSubmit ( model ) ;
124
+ } }
125
+ />
126
+ ) ;
127
+ } catch ( e ) {
128
+ return < p > Invalid form, ensure that the JSON is valid</ p > ;
129
+ }
130
+ } ;
94
131
render ( ) {
95
132
let data = this . state . data . map ( d => {
96
133
return (
97
134
< tr key = { d . id } >
98
- < td > { d . name } </ td >
135
+ { this . renderRow ( d ) }
136
+ { /* <td>{d.name}</td>
99
137
<td>{d.age}</td>
100
138
<td>{d.qualification}</td>
101
139
<td>{d.gender}</td>
102
140
<td>{d.rating}</td>
103
141
<td>{d.city}</td>
104
- < td > { d . skills && d . skills . length ? d . skills . join ( ', ' ) : '' } </ td >
142
+ <td>{d.skills && d.skills.length ? d.skills.join(', ') : ''}</td> */ }
105
143
< td >
106
144
< button
107
145
className = "ui button basic negative"
@@ -115,27 +153,32 @@ class App extends React.Component {
115
153
} ) ;
116
154
return (
117
155
< div className = "ui container" style = { { paddingTop : '50px' } } >
118
- < div className = "ui three column stackable grid container" >
119
- < div className = "showcase" >
156
+ < div className = "ui two column stackable grid container" >
157
+ < div className = "column showcase" >
158
+ < h4 className = "ui dividing header" > Form Schema</ h4 >
120
159
< textarea
121
160
style = { { fontFamily : 'monospace' } }
122
161
className = "json-input"
123
- value = { JSON . stringify ( this . state . model , null , 2 ) }
162
+ value = { this . state . model }
163
+ onChange = { this . handleModel }
124
164
/>
125
165
</ div >
126
166
< div className = "column" >
127
- < DynamicForm
128
- title = "Registration"
129
- defaultValues = { this . state . currentRecord }
130
- model = { this . state . model }
131
- onSubmit = { model => {
132
- this . onSubmit ( model ) ;
133
- } }
134
- />
167
+ < h4 className = "ui dividing header" > Rendered Form</ h4 >
168
+ { this . renderForm ( ) }
135
169
</ div >
170
+ </ div >
171
+ < div className = "clearfix" />
172
+ < br />
173
+ < br />
174
+ < br />
175
+ < div className = "ui column stackable grid container" >
136
176
< div className = "column" >
137
177
< h4 className = "ui dividing header" > Data</ h4 >
138
178
< table className = "ui stacked table" >
179
+ < thead >
180
+ < tr > { this . renderTableHead ( ) } </ tr >
181
+ </ thead >
139
182
< tbody > { data } </ tbody >
140
183
</ table >
141
184
</ div >
0 commit comments