Commit dbafa68d2adb056b4146c8733aa9a104f9176765
1 parent
def5858c91
Exists in
master
added teachers modal admin panel
Showing
20 changed files
with
2425 additions
and
1198 deletions
Show diff stats
imports/client/views/nonOrg/NotFound.css
... | ... | @@ -0,0 +1,17 @@ |
1 | +.NotFound | |
2 | +{ | |
3 | + margin: 20px auto; | |
4 | + width: 400px; | |
5 | + height: auto; | |
6 | + padding: 20px; | |
7 | + -webkit-border-radius: 8px/7px; | |
8 | + -moz-border-radius: 8px/7px; | |
9 | + border-radius: 8px/7px; | |
10 | + background-color: white; | |
11 | + -webkit-box-shadow: 1px 2px 5px rgba(0,0,0,.31); | |
12 | + -moz-box-shadow: 1px 2px 5px rgba(0,0,0,.31); | |
13 | + box-shadow: 1px 2px 5px rgba(0,0,0,.31); | |
14 | + border: solid 1px #cbc9c9; | |
15 | + font-family: 'Ubuntu', sans-serif; | |
16 | + color:crimson; | |
17 | +} | ... | ... |
imports/client/views/nonOrg/NotFound.js
imports/client/views/org/admin/Sidebar.js
... | ... | @@ -32,7 +32,7 @@ export class AdminSidebar extends Component { |
32 | 32 | <div className="sidebar-category sidebar-category-visible"> |
33 | 33 | <div className="category-content no-padding"> |
34 | 34 | <Nav className="navigation navigation-main navigation-accordion"> |
35 | - <NavItem className="navigation-header"><span>#schoolname</span> <i className="icon-menu" title="Main pages"></i></NavItem> | |
35 | + <NavItem className="navigation-header"><span>{org.name}</span> <i className="icon-menu" title="Main pages"></i></NavItem> | |
36 | 36 | <NavItem className="active" eventKey={1} href="#"><i className="icon-home4"></i> <span>Dashboard</span></NavItem> |
37 | 37 | |
38 | 38 | <NavDropdown eventKey={2} title="Settings" name="Settings" id="setting"> | ... | ... |
imports/client/views/org/admin/students/AddStudentFormContainer.js
... | ... | @@ -1,96 +0,0 @@ |
1 | -import React, { Component } from 'react' | |
2 | -import { AddStudentForm } from './addStudentForm' | |
3 | -import StudentForm from './StudentForm' | |
4 | -import Form from '/imports/client/views/core/Form' | |
5 | -import Validator from '/imports/client/views/core/Validator' | |
6 | -import { isRequired, isValidEmail } from '/imports/client/views/core/validations' | |
7 | -import { addStudentManually } from '/imports/collections/students/methods'; | |
8 | - | |
9 | -export class AddStudentFormContainer extends Component { | |
10 | - | |
11 | - constructor(props) { | |
12 | - super(props) | |
13 | - this.state = { currentStep: 0 } | |
14 | - this.handleNextClick = this.handleNextClick.bind(this) | |
15 | - this.handleBackClick = this.handleBackClick.bind(this) | |
16 | - this.handleSubmit = this.handleSubmit.bind(this) | |
17 | - } | |
18 | - | |
19 | - handleNextClick() { | |
20 | - this.form.handleSubmit() | |
21 | - if (this.validator.getErrors() && Object.keys(this.validator.getErrors()).length > 0) return | |
22 | - this.setState({ currentStep: this.state.currentStep + 1 }) | |
23 | - this.form.resetSubmitted() | |
24 | - } | |
25 | - | |
26 | - handleBackClick() { | |
27 | - this.setState({ currentStep: this.state.currentStep + -1 }) | |
28 | - } | |
29 | - | |
30 | - handleSubmit() { | |
31 | - if (this.state.currentStep === 3) { | |
32 | - addStudentManually.call(this.form.state.values) | |
33 | - } | |
34 | - } | |
35 | - | |
36 | - //render callback | |
37 | - render() { | |
38 | - return ( | |
39 | - <Form | |
40 | - onSubmit={this.handleSubmit} | |
41 | - ref={form => this.form = form} | |
42 | - initialValues={{ | |
43 | - gender: 'male', | |
44 | - parentGender: 'male', | |
45 | - }} | |
46 | - > | |
47 | - {({ values, setValue, getValue, isSubmitted, isDirty }) => ( | |
48 | - <Validator | |
49 | - values={values} | |
50 | - ref={validator => this.validator = validator} | |
51 | - validations={{ | |
52 | - admissionId: [(value) => isRequired('Admission id', value)], | |
53 | - firstName: [(value) => isRequired('First name', value)], | |
54 | - lastName: [(value) => isRequired('Last name', value)], | |
55 | - email: [(value) => isRequired('Email', value), isValidEmail], | |
56 | - dob: [(value) => isRequired('Date of birth', value)], | |
57 | - gender: [(value) => isRequired('Gender', value)], | |
58 | - rollNo: [(value) => this.state.currentStep === 1 && isRequired('Roll no', value)], | |
59 | - studentClass: [(value) => this.state.currentStep === 1 && isRequired('Class', value)], | |
60 | - section: [(value) => this.state.currentStep === 1 && isRequired('Section', value)], | |
61 | - community: [(value) => this.state.currentStep === 1 && isRequired('Community', value)], | |
62 | - bloodGroup: [(value) => this.state.currentStep === 1 && isRequired('Blood group', value)], | |
63 | - phone: [(value) => this.state.currentStep === 1 && isRequired('Phone', value)], | |
64 | - address: [(value) => this.state.currentStep === 2 && isRequired('Address', value)], | |
65 | - city: [(value) => this.state.currentStep === 2 && isRequired('City', value)], | |
66 | - state: [(value) => this.state.currentStep === 2 && isRequired('State', value)], | |
67 | - parentName: [(value) => this.state.currentStep === 3 && isRequired('Parent name', value)], | |
68 | - parentEmail: [(value) => this.state.currentStep === 3 && isRequired('Parent email', value), (value) => this.state.currentStep === 3 && isValidEmail(value)], | |
69 | - relation: [(value) => this.state.currentStep === 3 && isRequired('Relation', value)], | |
70 | - profession: [(value) => this.state.currentStep === 3 && isRequired('Profession', value)], | |
71 | - parentGender: [(value) => this.state.currentStep === 3 && isRequired('Parent gender', value)], | |
72 | - parentPhone: [(value) => this.state.currentStep === 3 && isRequired('Parent phone', value)], | |
73 | - parentAddress: [(value) => this.state.currentStep === 3 && isRequired('Parent address', value)], | |
74 | - parentCity: [(value) => this.state.currentStep === 3 && isRequired('Parent city', value)], | |
75 | - parentState: [(value) => this.state.currentStep === 3 && isRequired('Parent state', value)], | |
76 | - parentZipcode: [(value) => this.state.currentStep === 3 && isRequired('Parent zip code', value)], | |
77 | - }} | |
78 | - > | |
79 | - {({ errors }) => ( | |
80 | - <StudentForm | |
81 | - isDirty={isDirty} | |
82 | - setValue={setValue} | |
83 | - getValue={getValue} | |
84 | - isSubmitted={isSubmitted} | |
85 | - errors={errors} | |
86 | - onNextClick={this.handleNextClick} | |
87 | - onBackClick={this.handleBackClick} | |
88 | - currentStep={this.state.currentStep} | |
89 | - /> | |
90 | - )} | |
91 | - </Validator> | |
92 | - )} | |
93 | - </Form> | |
94 | - ) | |
95 | - } | |
96 | -} |
imports/client/views/org/admin/students/FabMenu.js
... | ... | @@ -1,35 +0,0 @@ |
1 | -import _ from 'lodash'; | |
2 | -import { Meteor } from 'meteor/meteor'; | |
3 | - | |
4 | -import React, { Component } from 'react'; | |
5 | -import { Link,browserHistory } from 'react-router'; | |
6 | -import { FormGroup,Panel,Table, | |
7 | - ButtonToolbar,Modal, | |
8 | - FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
9 | -import { AddStudentForm } from './addStudentForm'; | |
10 | - | |
11 | -const style = { | |
12 | - margin: 12, | |
13 | -}; | |
14 | -export class FabMenuView extends Component { | |
15 | - constructor(props) { | |
16 | - super(props); | |
17 | - this.state = { | |
18 | - show: false | |
19 | - }; | |
20 | - this.onUpdate = this.onUpdate.bind(this); | |
21 | - }; | |
22 | - onUpdate(key, value) { | |
23 | - this.setState({[key]: value}); | |
24 | - }; | |
25 | - | |
26 | - render() { | |
27 | - return ( | |
28 | - <div> | |
29 | - <Button bsStyle="primary">Add Student</Button> | |
30 | - <Button bsStyle="info">Upload CSV</Button> | |
31 | - </div> | |
32 | - ); | |
33 | - }; | |
34 | - | |
35 | -}; |
imports/client/views/org/admin/students/StudentForm.js
... | ... | @@ -1,485 +0,0 @@ |
1 | -import React, { PropTypes } from 'react' | |
2 | -import { | |
3 | - Row, | |
4 | - Col, | |
5 | - FormGroup, | |
6 | - FormControl, | |
7 | - Button | |
8 | -} from 'react-bootstrap' | |
9 | -import DatePicker from '/imports/client/views/core/DatePicker' | |
10 | -import Label from '/imports/client/views/core/Label' | |
11 | -import Stepper from '/imports/client/views/core/Stepper' | |
12 | -import ErrorLabel from '/imports/client/views/core/ErrorLabel' | |
13 | - | |
14 | -const StudentForm = props => ( | |
15 | - <div className="stepy-validation"> | |
16 | - <Stepper | |
17 | - steps={[ | |
18 | - { | |
19 | - label: 'Personal data', | |
20 | - active: props.currentStep === 0, | |
21 | - }, | |
22 | - { | |
23 | - label: 'Academic', | |
24 | - active: props.currentStep === 1, | |
25 | - }, | |
26 | - { | |
27 | - label: 'Address', | |
28 | - active: props.currentStep === 2, | |
29 | - }, | |
30 | - { | |
31 | - label: 'Parent info', | |
32 | - active: props.currentStep === 3, | |
33 | - } | |
34 | - ]} | |
35 | - /> | |
36 | - {props.currentStep === 0 && ( | |
37 | - <fieldset title="1"> | |
38 | - <legend className="text-semibold">Personal data</legend> | |
39 | - <Row> | |
40 | - <Col xs={12} sm={6}> | |
41 | - <FormGroup controlId="admissionId"> | |
42 | - <Label required>Admission Id</Label> | |
43 | - <FormControl | |
44 | - type="text" | |
45 | - value={props.getValue('admissionId')} | |
46 | - placeholder="admission Id" | |
47 | - onChange={e => props.setValue('admissionId', e.target.value)} | |
48 | - /> | |
49 | - {props.isSubmitted() && props.errors && props.errors.admissionId && ( | |
50 | - <ErrorLabel> {props.errors.admissionId} </ErrorLabel> | |
51 | - )} | |
52 | - </FormGroup> | |
53 | - </Col> | |
54 | - <Col xs={12} sm={6}> | |
55 | - <FormGroup controlId="firstName"> | |
56 | - <Label required>First Name</Label> | |
57 | - <FormControl | |
58 | - type="text" | |
59 | - value={props.getValue('firstName')} | |
60 | - placeholder="First Name" | |
61 | - onChange={e => props.setValue('firstName', e.target.value)} | |
62 | - /> | |
63 | - {props.isSubmitted() && props.errors && props.errors.firstName && ( | |
64 | - <ErrorLabel> {props.errors.firstName} </ErrorLabel> | |
65 | - )} | |
66 | - </FormGroup> | |
67 | - </Col> | |
68 | - </Row> | |
69 | - <Row> | |
70 | - <Col xs={12} sm={6}> | |
71 | - <FormGroup controlId="lastName"> | |
72 | - <Label required>Last Name</Label> | |
73 | - <FormControl | |
74 | - type="text" | |
75 | - value={props.getValue('lastName')} | |
76 | - placeholder="Last Name" | |
77 | - onChange={e => props.setValue('lastName', e.target.value)} | |
78 | - /> | |
79 | - {props.isSubmitted() && props.errors && props.errors.lastName && ( | |
80 | - <ErrorLabel> {props.errors.lastName} </ErrorLabel> | |
81 | - )} | |
82 | - </FormGroup> | |
83 | - </Col> | |
84 | - <Col xs={12} sm={6}> | |
85 | - <FormGroup controlId="formControlsSelect"> | |
86 | - <Label>Gender</Label> | |
87 | - <FormControl componentClass="select" | |
88 | - placeholder="select" | |
89 | - value={props.getValue('gender')} | |
90 | - onChange={e => props.setValue('gender', e.target.value)} | |
91 | - > | |
92 | - <option value="male">Male</option> | |
93 | - <option value="female">Female</option> | |
94 | - </FormControl> | |
95 | - {props.isSubmitted() && props.errors && props.errors.gender && ( | |
96 | - <ErrorLabel> {props.errors.gender} </ErrorLabel> | |
97 | - )} | |
98 | - </FormGroup> | |
99 | - </Col> | |
100 | - </Row> | |
101 | - <Row> | |
102 | - <Col xs={12} sm={6}> | |
103 | - <FormGroup controlId="email"> | |
104 | - <Label required>Email</Label> | |
105 | - <FormControl | |
106 | - type="email" | |
107 | - value={props.getValue('email')} | |
108 | - placeholder="Email" | |
109 | - onChange={e => props.setValue('email', e.target.value)} | |
110 | - /> | |
111 | - {props.isSubmitted() && props.errors && props.errors.email && ( | |
112 | - <ErrorLabel> {props.errors.email} </ErrorLabel> | |
113 | - )} | |
114 | - </FormGroup> | |
115 | - </Col> | |
116 | - <Col xs={12} sm={6}> | |
117 | - <FormGroup> | |
118 | - <Label required>Date of birth</Label> | |
119 | - <DatePicker | |
120 | - id="dob" | |
121 | - setValue = {props.setValue} | |
122 | - value={props.getValue('dob')} | |
123 | - onChange={(e) => { | |
124 | - props.setValue('dob', e.target.value) | |
125 | - }} | |
126 | - /> | |
127 | - {props.isSubmitted() && props.errors && props.errors.dob && ( | |
128 | - <ErrorLabel> {props.errors.dob} </ErrorLabel> | |
129 | - )} | |
130 | - </FormGroup> | |
131 | - </Col> | |
132 | - </Row> | |
133 | - <Row> | |
134 | - | |
135 | - </Row> | |
136 | - </fieldset> | |
137 | - )} | |
138 | - {props.currentStep === 1 && ( | |
139 | - <fieldset title="Academic"> | |
140 | - <legend className="text-semibold">Academic</legend> | |
141 | - <Row> | |
142 | - <Col xs={12} sm={6}> | |
143 | - <FormGroup controlId="rollNo"> | |
144 | - <Label required>Roll No</Label> | |
145 | - <FormControl | |
146 | - type="text" | |
147 | - value={props.getValue('rollNo')} | |
148 | - placeholder="Roll No" | |
149 | - onChange={e => props.setValue('rollNo', e.target.value)} | |
150 | - /> | |
151 | - {props.isSubmitted() && props.errors && props.errors.rollNo && ( | |
152 | - <ErrorLabel> {props.errors.rollNo} </ErrorLabel> | |
153 | - )} | |
154 | - </FormGroup> | |
155 | - </Col> | |
156 | - <Col xs={12} sm={6}> | |
157 | - <FormGroup controlId="class"> | |
158 | - <Label required>Class</Label> | |
159 | - <FormControl | |
160 | - type="text" | |
161 | - value={props.getValue('studentClass')} | |
162 | - placeholder="7" | |
163 | - onChange={e => props.setValue('studentClass', e.target.value)} | |
164 | - /> | |
165 | - {props.isSubmitted() && props.errors && props.errors.studentClass && ( | |
166 | - <ErrorLabel> {props.errors.studentClass} </ErrorLabel> | |
167 | - )} | |
168 | - </FormGroup> | |
169 | - </Col> | |
170 | - </Row> | |
171 | - <Row> | |
172 | - <Col xs={12} sm={6}> | |
173 | - <FormGroup controlId="section"> | |
174 | - <Label required>Section</Label> | |
175 | - <FormControl | |
176 | - type="text" | |
177 | - value={props.getValue('section')} | |
178 | - placeholder="B" | |
179 | - onChange={e => props.setValue('section', e.target.value)} | |
180 | - /> | |
181 | - {props.isSubmitted() && props.errors && props.errors.section && ( | |
182 | - <ErrorLabel> {props.errors.section} </ErrorLabel> | |
183 | - )} | |
184 | - </FormGroup> | |
185 | - </Col> | |
186 | - <Col xs={12} sm={6}> | |
187 | - <FormGroup controlId="community"> | |
188 | - <Label required>Community</Label> | |
189 | - <FormControl | |
190 | - type="text" | |
191 | - value={props.getValue('community')} | |
192 | - placeholder="General" | |
193 | - onChange={e => props.setValue('community', e.target.value)} | |
194 | - /> | |
195 | - {props.isSubmitted() && props.errors && props.errors.community && ( | |
196 | - <ErrorLabel> {props.errors.community} </ErrorLabel> | |
197 | - )} | |
198 | - </FormGroup> | |
199 | - </Col> | |
200 | - </Row> | |
201 | - <Row> | |
202 | - <Col xs={12} sm={6}> | |
203 | - <FormGroup controlId="bloodGroup"> | |
204 | - <Label required>bloodGroup</Label> | |
205 | - <FormControl | |
206 | - type="text" | |
207 | - value={props.getValue('bloodGroup')} | |
208 | - placeholder="B+" | |
209 | - onChange={e => props.setValue('bloodGroup', e.target.value)} | |
210 | - /> | |
211 | - {props.isSubmitted() && props.errors && props.errors.bloodGroup && ( | |
212 | - <ErrorLabel> {props.errors.bloodGroup} </ErrorLabel> | |
213 | - )} | |
214 | - </FormGroup> | |
215 | - </Col> | |
216 | - <Col xs={12} sm={6}> | |
217 | - <FormGroup controlId="phone"> | |
218 | - <Label required>Phone</Label> | |
219 | - <FormControl | |
220 | - type="text" | |
221 | - value={props.getValue('phone')} | |
222 | - placeholder="9999999999" | |
223 | - onChange={e => props.setValue('phone', e.target.value)} | |
224 | - /> | |
225 | - {props.isSubmitted() && props.errors && props.errors.phone && ( | |
226 | - <ErrorLabel> {props.errors.phone} </ErrorLabel> | |
227 | - )} | |
228 | - </FormGroup> | |
229 | - </Col> | |
230 | - </Row> | |
231 | - </fieldset> | |
232 | - )} | |
233 | - {props.currentStep === 2 && ( | |
234 | - <fieldset title="Address"> | |
235 | - <legend className="text-semibold">Address</legend> | |
236 | - <Row> | |
237 | - <Col xs={12} sm={6}> | |
238 | - <FormGroup controlId="address"> | |
239 | - <Label required>Address</Label> | |
240 | - <FormControl | |
241 | - type="text" | |
242 | - value={props.getValue('address')} | |
243 | - placeholder="#876, Street, town" | |
244 | - onChange={e => props.setValue('address', e.target.value)} | |
245 | - /> | |
246 | - {props.isSubmitted() && props.errors && props.errors.address && ( | |
247 | - <ErrorLabel> {props.errors.address} </ErrorLabel> | |
248 | - )} | |
249 | - </FormGroup> | |
250 | - </Col> | |
251 | - <Col xs={12} sm={6}> | |
252 | - <FormGroup controlId="city"> | |
253 | - <Label required>City</Label> | |
254 | - <FormControl | |
255 | - type="text" | |
256 | - value={props.getValue('city')} | |
257 | - placeholder="Chennai" | |
258 | - onChange={e => props.setValue('city', e.target.value)} | |
259 | - /> | |
260 | - {props.isSubmitted() && props.errors && props.errors.city && ( | |
261 | - <ErrorLabel> {props.errors.city} </ErrorLabel> | |
262 | - )} | |
263 | - </FormGroup> | |
264 | - </Col> | |
265 | - </Row> | |
266 | - <Row> | |
267 | - <Col xs={12} sm={6}> | |
268 | - <FormGroup controlId="state"> | |
269 | - <Label required>State</Label> | |
270 | - <FormControl | |
271 | - type="text" | |
272 | - value={props.getValue('state')} | |
273 | - placeholder="Tamilnadu" | |
274 | - onChange={e => props.setValue('state', e.target.value)} | |
275 | - /> | |
276 | - {props.isSubmitted() && props.errors && props.errors.state && ( | |
277 | - <ErrorLabel> {props.errors.state} </ErrorLabel> | |
278 | - )} | |
279 | - </FormGroup> | |
280 | - </Col> | |
281 | - </Row> | |
282 | - </fieldset> | |
283 | - )} | |
284 | - {props.currentStep === 3 && ( | |
285 | - <fieldset title="2"> | |
286 | - <legend className="text-semibold">Parent information</legend> | |
287 | - <Row> | |
288 | - <Col xs={12} sm={6}> | |
289 | - <FormGroup controlId="parentName"> | |
290 | - <Label required>Parent Name</Label> | |
291 | - <FormControl | |
292 | - type="text" | |
293 | - value={props.getValue('parentName')} | |
294 | - placeholder="John" | |
295 | - onChange={e => props.setValue('parentName', e.target.value)} | |
296 | - /> | |
297 | - {props.isSubmitted() && props.errors && props.errors.parentName && ( | |
298 | - <ErrorLabel> {props.errors.parentName} </ErrorLabel> | |
299 | - )} | |
300 | - </FormGroup> | |
301 | - </Col> | |
302 | - <Col xs={12} sm={6}> | |
303 | - <FormGroup controlId="parentEmail"> | |
304 | - <Label required>Parent Email</Label> | |
305 | - <FormControl | |
306 | - type="text" | |
307 | - value={props.getValue('parentEmail')} | |
308 | - placeholder="john@email.com" | |
309 | - onChange={e => props.setValue('parentEmail', e.target.value)} | |
310 | - /> | |
311 | - {props.isSubmitted() && props.errors && props.errors.parentEmail && ( | |
312 | - <ErrorLabel> {props.errors.parentEmail} </ErrorLabel> | |
313 | - )} | |
314 | - </FormGroup> | |
315 | - </Col> | |
316 | - </Row> | |
317 | - <Row> | |
318 | - <Col xs={12} sm={6}> | |
319 | - <FormGroup controlId="relation"> | |
320 | - <Label required>Relation</Label> | |
321 | - <FormControl | |
322 | - type="text" | |
323 | - value={props.getValue('relation')} | |
324 | - placeholder="Father" | |
325 | - onChange={e => props.setValue('relation', e.target.value)} | |
326 | - /> | |
327 | - {props.isSubmitted() && props.errors && props.errors.relation && ( | |
328 | - <ErrorLabel> {props.errors.relation} </ErrorLabel> | |
329 | - )} | |
330 | - </FormGroup> | |
331 | - </Col> | |
332 | - <Col xs={12} sm={6}> | |
333 | - <FormGroup controlId="profession"> | |
334 | - <Label required>Profession</Label> | |
335 | - <FormControl | |
336 | - type="text" | |
337 | - value={props.getValue('profession')} | |
338 | - placeholder="Farmer" | |
339 | - onChange={e => props.setValue('profession', e.target.value)} | |
340 | - /> | |
341 | - {props.isSubmitted() && props.errors && props.errors.profession && ( | |
342 | - <ErrorLabel> {props.errors.profession} </ErrorLabel> | |
343 | - )} | |
344 | - </FormGroup> | |
345 | - </Col> | |
346 | - </Row> | |
347 | - <Row> | |
348 | - <Col xs={12} sm={6}> | |
349 | - <FormGroup controlId="parentGender"> | |
350 | - <Label>Parent Gender</Label> | |
351 | - <FormControl componentClass="select" | |
352 | - placeholder="select" | |
353 | - value={props.getValue('parentGender')} | |
354 | - onChange={e => props.setValue('parentGender', e.target.value)} | |
355 | - > | |
356 | - <option value="male">Male</option> | |
357 | - <option value="female">Female</option> | |
358 | - </FormControl> | |
359 | - {props.isSubmitted() && props.errors && props.errors.parentGender && ( | |
360 | - <ErrorLabel> {props.errors.parentGender} </ErrorLabel> | |
361 | - )} | |
362 | - </FormGroup> | |
363 | - </Col> | |
364 | - <Col xs={12} sm={6}> | |
365 | - <FormGroup controlId="parentPhone"> | |
366 | - <Label required>Parent Phone</Label> | |
367 | - <FormControl | |
368 | - type="text" | |
369 | - value={props.getValue('parentPhone')} | |
370 | - placeholder="9876543210" | |
371 | - onChange={e => props.setValue('parentPhone', e.target.value)} | |
372 | - /> | |
373 | - {props.isSubmitted() && props.errors && props.errors.parentPhone && ( | |
374 | - <ErrorLabel> {props.errors.parentPhone} </ErrorLabel> | |
375 | - )} | |
376 | - </FormGroup> | |
377 | - </Col> | |
378 | - </Row> | |
379 | - <Row> | |
380 | - <Col xs={12} sm={6}> | |
381 | - <FormGroup controlId="parentAddress"> | |
382 | - <Label required>Parent Address</Label> | |
383 | - <FormControl | |
384 | - type="text" | |
385 | - value={props.getValue('parentAddress')} | |
386 | - placeholder="#12, street, town" | |
387 | - onChange={e => props.setValue('parentAddress', e.target.value)} | |
388 | - /> | |
389 | - {props.isSubmitted() && props.errors && props.errors.parentAddress && ( | |
390 | - <ErrorLabel> {props.errors.parentAddress} </ErrorLabel> | |
391 | - )} | |
392 | - </FormGroup> | |
393 | - </Col> | |
394 | - <Col xs={12} sm={6}> | |
395 | - <FormGroup controlId="parentCity"> | |
396 | - <Label required>Parent City</Label> | |
397 | - <FormControl | |
398 | - type="text" | |
399 | - value={props.getValue('parentCity')} | |
400 | - placeholder="Chennai" | |
401 | - onChange={e => props.setValue('parentCity', e.target.value)} | |
402 | - /> | |
403 | - {props.isSubmitted() && props.errors && props.errors.parentCity && ( | |
404 | - <ErrorLabel> {props.errors.parentCity} </ErrorLabel> | |
405 | - )} | |
406 | - </FormGroup> | |
407 | - </Col> | |
408 | - </Row> | |
409 | - <Row> | |
410 | - <Col xs={12} sm={6}> | |
411 | - <FormGroup controlId="parentState"> | |
412 | - <Label required>Parent State</Label> | |
413 | - <FormControl | |
414 | - type="text" | |
415 | - value={props.getValue('parentState')} | |
416 | - placeholder="600031" | |
417 | - onChange={e => props.setValue('parentState', e.target.value)} | |
418 | - /> | |
419 | - {props.isSubmitted() && props.errors && props.errors.parentState && ( | |
420 | - <ErrorLabel> {props.errors.parentState} </ErrorLabel> | |
421 | - )} | |
422 | - </FormGroup> | |
423 | - </Col> | |
424 | - <Col xs={12} sm={6}> | |
425 | - <FormGroup controlId="parentZipcode"> | |
426 | - <Label required>Parent Zipcode</Label> | |
427 | - <FormControl | |
428 | - type="text" | |
429 | - value={props.getValue('parentZipcode')} | |
430 | - placeholder="600031" | |
431 | - onChange={e => props.setValue('parentZipcode', e.target.value)} | |
432 | - /> | |
433 | - {props.isSubmitted() && props.errors && props.errors.parentZipcode && ( | |
434 | - <ErrorLabel> {props.errors.parentZipcode} </ErrorLabel> | |
435 | - )} | |
436 | - </FormGroup> | |
437 | - </Col> | |
438 | - </Row> | |
439 | - </fieldset> | |
440 | - )} | |
441 | - <div style={{ textAlign: 'left' }}> | |
442 | - {props.currentStep > 0 && ( | |
443 | - <div style={{ display: 'inline-block', marginRight: 10 }}> | |
444 | - <Button onClick={props.onBackClick}> | |
445 | - <i className="icon-arrow-left13 position-left"></i> | |
446 | - BACK | |
447 | - </Button> | |
448 | - | |
449 | - </div> | |
450 | - )} | |
451 | - {props.currentStep < 3 && ( | |
452 | - <div style={{ display: 'inline-block' }}> | |
453 | - <Button | |
454 | - bsStyle="primary" | |
455 | - onClick={props.onNextClick} | |
456 | - > | |
457 | - NEXT | |
458 | - <i className="icon-arrow-right14 position-right" /> | |
459 | - </Button> | |
460 | - </div> | |
461 | - )} | |
462 | - {props.currentStep === 3 && ( | |
463 | - <div style={{ display: 'inline-block' }}> | |
464 | - <Button | |
465 | - bsStyle="primary" | |
466 | - onClick={props.onNextClick} | |
467 | - > | |
468 | - SAVE | |
469 | - <i className="fa fa-check" /> | |
470 | - </Button> | |
471 | - </div> | |
472 | - )} | |
473 | - </div> | |
474 | - </div> | |
475 | -) | |
476 | - | |
477 | -StudentForm.propTypes = { | |
478 | - currentStep: PropTypes.number.isRequired, | |
479 | - onNextClick: PropTypes.func.isRequired, | |
480 | - onBackClick: PropTypes.func.isRequired, | |
481 | - setValue: PropTypes.func.isRequired, | |
482 | - getValue: PropTypes.func.isRequired, | |
483 | -} | |
484 | - | |
485 | -export default StudentForm |
imports/client/views/org/admin/students/StudentView.js
... | ... | @@ -12,11 +12,10 @@ import { StudentTable } from './view/StudentTable'; |
12 | 12 | import { Header } from '../Header'; |
13 | 13 | import { AdminSidebar } from '../Sidebar' |
14 | 14 | import { AdminBreadcrumb } from '../Breadcrumb' |
15 | -import { FabMenuView } from './FabMenu'; | |
16 | 15 | import { UploadCsv } from './UploadCsv'; |
17 | -import { AddStudent } from './addStudent'; | |
16 | +import { AddStudent } from './add/addStudent'; | |
18 | 17 | import { Students } from '/imports/collections/students/index'; |
19 | - | |
18 | +import './student.css' | |
20 | 19 | |
21 | 20 | export class StudentView extends Component { |
22 | 21 | ... | ... |
imports/client/views/org/admin/students/add/AddStudentFormContainer.js
... | ... | @@ -0,0 +1,96 @@ |
1 | +import React, { Component } from 'react' | |
2 | +import { AddStudentForm } from './addStudentForm' | |
3 | +import StudentForm from './StudentForm' | |
4 | +import Form from '/imports/client/views/core/Form' | |
5 | +import Validator from '/imports/client/views/core/Validator' | |
6 | +import { isRequired, isValidEmail } from '/imports/client/views/core/validations' | |
7 | +import { addStudentManually } from '/imports/collections/students/methods'; | |
8 | + | |
9 | +export class AddStudentFormContainer extends Component { | |
10 | + | |
11 | + constructor(props) { | |
12 | + super(props) | |
13 | + this.state = { currentStep: 0 } | |
14 | + this.handleNextClick = this.handleNextClick.bind(this) | |
15 | + this.handleBackClick = this.handleBackClick.bind(this) | |
16 | + this.handleSubmit = this.handleSubmit.bind(this) | |
17 | + } | |
18 | + | |
19 | + handleNextClick() { | |
20 | + this.form.handleSubmit() | |
21 | + if (this.validator.getErrors() && Object.keys(this.validator.getErrors()).length > 0) return | |
22 | + this.setState({ currentStep: this.state.currentStep + 1 }) | |
23 | + this.form.resetSubmitted() | |
24 | + } | |
25 | + | |
26 | + handleBackClick() { | |
27 | + this.setState({ currentStep: this.state.currentStep + -1 }) | |
28 | + } | |
29 | + | |
30 | + handleSubmit() { | |
31 | + if (this.state.currentStep === 3) { | |
32 | + addStudentManually.call(this.form.state.values) | |
33 | + } | |
34 | + } | |
35 | + | |
36 | + //render callback | |
37 | + render() { | |
38 | + return ( | |
39 | + <Form | |
40 | + onSubmit={this.handleSubmit} | |
41 | + ref={form => this.form = form} | |
42 | + initialValues={{ | |
43 | + gender: 'male', | |
44 | + parentGender: 'male', | |
45 | + }} | |
46 | + > | |
47 | + {({ values, setValue, getValue, isSubmitted, isDirty }) => ( | |
48 | + <Validator | |
49 | + values={values} | |
50 | + ref={validator => this.validator = validator} | |
51 | + validations={{ | |
52 | + admissionId: [(value) => isRequired('Admission id', value)], | |
53 | + firstName: [(value) => isRequired('First name', value)], | |
54 | + lastName: [(value) => isRequired('Last name', value)], | |
55 | + email: [(value) => isRequired('Email', value), isValidEmail], | |
56 | + dob: [(value) => isRequired('Date of birth', value)], | |
57 | + gender: [(value) => isRequired('Gender', value)], | |
58 | + rollNo: [(value) => this.state.currentStep === 1 && isRequired('Roll no', value)], | |
59 | + studentClass: [(value) => this.state.currentStep === 1 && isRequired('Class', value)], | |
60 | + section: [(value) => this.state.currentStep === 1 && isRequired('Section', value)], | |
61 | + community: [(value) => this.state.currentStep === 1 && isRequired('Community', value)], | |
62 | + bloodGroup: [(value) => this.state.currentStep === 1 && isRequired('Blood group', value)], | |
63 | + phone: [(value) => this.state.currentStep === 1 && isRequired('Phone', value)], | |
64 | + address: [(value) => this.state.currentStep === 2 && isRequired('Address', value)], | |
65 | + city: [(value) => this.state.currentStep === 2 && isRequired('City', value)], | |
66 | + state: [(value) => this.state.currentStep === 2 && isRequired('State', value)], | |
67 | + parentName: [(value) => this.state.currentStep === 3 && isRequired('Parent name', value)], | |
68 | + parentEmail: [(value) => this.state.currentStep === 3 && isRequired('Parent email', value), (value) => this.state.currentStep === 3 && isValidEmail(value)], | |
69 | + relation: [(value) => this.state.currentStep === 3 && isRequired('Relation', value)], | |
70 | + profession: [(value) => this.state.currentStep === 3 && isRequired('Profession', value)], | |
71 | + parentGender: [(value) => this.state.currentStep === 3 && isRequired('Parent gender', value)], | |
72 | + parentPhone: [(value) => this.state.currentStep === 3 && isRequired('Parent phone', value)], | |
73 | + parentAddress: [(value) => this.state.currentStep === 3 && isRequired('Parent address', value)], | |
74 | + parentCity: [(value) => this.state.currentStep === 3 && isRequired('Parent city', value)], | |
75 | + parentState: [(value) => this.state.currentStep === 3 && isRequired('Parent state', value)], | |
76 | + parentZipcode: [(value) => this.state.currentStep === 3 && isRequired('Parent zip code', value)], | |
77 | + }} | |
78 | + > | |
79 | + {({ errors }) => ( | |
80 | + <StudentForm | |
81 | + isDirty={isDirty} | |
82 | + setValue={setValue} | |
83 | + getValue={getValue} | |
84 | + isSubmitted={isSubmitted} | |
85 | + errors={errors} | |
86 | + onNextClick={this.handleNextClick} | |
87 | + onBackClick={this.handleBackClick} | |
88 | + currentStep={this.state.currentStep} | |
89 | + /> | |
90 | + )} | |
91 | + </Validator> | |
92 | + )} | |
93 | + </Form> | |
94 | + ) | |
95 | + } | |
96 | +} | ... | ... |
imports/client/views/org/admin/students/add/StudentForm.js
... | ... | @@ -0,0 +1,485 @@ |
1 | +import React, { PropTypes } from 'react' | |
2 | +import { | |
3 | + Row, | |
4 | + Col, | |
5 | + FormGroup, | |
6 | + FormControl, | |
7 | + Button | |
8 | +} from 'react-bootstrap' | |
9 | +import DatePicker from '/imports/client/views/core/DatePicker' | |
10 | +import Label from '/imports/client/views/core/Label' | |
11 | +import Stepper from '/imports/client/views/core/Stepper' | |
12 | +import ErrorLabel from '/imports/client/views/core/ErrorLabel' | |
13 | + | |
14 | +const StudentForm = props => ( | |
15 | + <div className="stepy-validation"> | |
16 | + <Stepper | |
17 | + steps={[ | |
18 | + { | |
19 | + label: 'Personal data', | |
20 | + active: props.currentStep === 0, | |
21 | + }, | |
22 | + { | |
23 | + label: 'Academic', | |
24 | + active: props.currentStep === 1, | |
25 | + }, | |
26 | + { | |
27 | + label: 'Address', | |
28 | + active: props.currentStep === 2, | |
29 | + }, | |
30 | + { | |
31 | + label: 'Parent info', | |
32 | + active: props.currentStep === 3, | |
33 | + } | |
34 | + ]} | |
35 | + /> | |
36 | + {props.currentStep === 0 && ( | |
37 | + <fieldset title="1"> | |
38 | + <legend className="text-semibold">Personal data</legend> | |
39 | + <Row> | |
40 | + <Col xs={12} sm={6}> | |
41 | + <FormGroup controlId="admissionId"> | |
42 | + <Label required>Admission Id</Label> | |
43 | + <FormControl | |
44 | + type="text" | |
45 | + value={props.getValue('admissionId')} | |
46 | + placeholder="admission Id" | |
47 | + onChange={e => props.setValue('admissionId', e.target.value)} | |
48 | + /> | |
49 | + {props.isSubmitted() && props.errors && props.errors.admissionId && ( | |
50 | + <ErrorLabel> {props.errors.admissionId} </ErrorLabel> | |
51 | + )} | |
52 | + </FormGroup> | |
53 | + </Col> | |
54 | + <Col xs={12} sm={6}> | |
55 | + <FormGroup controlId="firstName"> | |
56 | + <Label required>First Name</Label> | |
57 | + <FormControl | |
58 | + type="text" | |
59 | + value={props.getValue('firstName')} | |
60 | + placeholder="First Name" | |
61 | + onChange={e => props.setValue('firstName', e.target.value)} | |
62 | + /> | |
63 | + {props.isSubmitted() && props.errors && props.errors.firstName && ( | |
64 | + <ErrorLabel> {props.errors.firstName} </ErrorLabel> | |
65 | + )} | |
66 | + </FormGroup> | |
67 | + </Col> | |
68 | + </Row> | |
69 | + <Row> | |
70 | + <Col xs={12} sm={6}> | |
71 | + <FormGroup controlId="lastName"> | |
72 | + <Label required>Last Name</Label> | |
73 | + <FormControl | |
74 | + type="text" | |
75 | + value={props.getValue('lastName')} | |
76 | + placeholder="Last Name" | |
77 | + onChange={e => props.setValue('lastName', e.target.value)} | |
78 | + /> | |
79 | + {props.isSubmitted() && props.errors && props.errors.lastName && ( | |
80 | + <ErrorLabel> {props.errors.lastName} </ErrorLabel> | |
81 | + )} | |
82 | + </FormGroup> | |
83 | + </Col> | |
84 | + <Col xs={12} sm={6}> | |
85 | + <FormGroup controlId="formControlsSelect"> | |
86 | + <Label>Gender</Label> | |
87 | + <FormControl componentClass="select" | |
88 | + placeholder="select" | |
89 | + value={props.getValue('gender')} | |
90 | + onChange={e => props.setValue('gender', e.target.value)} | |
91 | + > | |
92 | + <option value="male">Male</option> | |
93 | + <option value="female">Female</option> | |
94 | + </FormControl> | |
95 | + {props.isSubmitted() && props.errors && props.errors.gender && ( | |
96 | + <ErrorLabel> {props.errors.gender} </ErrorLabel> | |
97 | + )} | |
98 | + </FormGroup> | |
99 | + </Col> | |
100 | + </Row> | |
101 | + <Row> | |
102 | + <Col xs={12} sm={6}> | |
103 | + <FormGroup controlId="email"> | |
104 | + <Label required>Email</Label> | |
105 | + <FormControl | |
106 | + type="email" | |
107 | + value={props.getValue('email')} | |
108 | + placeholder="Email" | |
109 | + onChange={e => props.setValue('email', e.target.value)} | |
110 | + /> | |
111 | + {props.isSubmitted() && props.errors && props.errors.email && ( | |
112 | + <ErrorLabel> {props.errors.email} </ErrorLabel> | |
113 | + )} | |
114 | + </FormGroup> | |
115 | + </Col> | |
116 | + <Col xs={12} sm={6}> | |
117 | + <FormGroup> | |
118 | + <Label required>Date of birth</Label> | |
119 | + <DatePicker | |
120 | + id="dob" | |
121 | + setValue = {props.setValue} | |
122 | + value={props.getValue('dob')} | |
123 | + onChange={(e) => { | |
124 | + props.setValue('dob', e.target.value) | |
125 | + }} | |
126 | + /> | |
127 | + {props.isSubmitted() && props.errors && props.errors.dob && ( | |
128 | + <ErrorLabel> {props.errors.dob} </ErrorLabel> | |
129 | + )} | |
130 | + </FormGroup> | |
131 | + </Col> | |
132 | + </Row> | |
133 | + <Row> | |
134 | + | |
135 | + </Row> | |
136 | + </fieldset> | |
137 | + )} | |
138 | + {props.currentStep === 1 && ( | |
139 | + <fieldset title="Academic"> | |
140 | + <legend className="text-semibold">Academic</legend> | |
141 | + <Row> | |
142 | + <Col xs={12} sm={6}> | |
143 | + <FormGroup controlId="rollNo"> | |
144 | + <Label required>Roll No</Label> | |
145 | + <FormControl | |
146 | + type="text" | |
147 | + value={props.getValue('rollNo')} | |
148 | + placeholder="Roll No" | |
149 | + onChange={e => props.setValue('rollNo', e.target.value)} | |
150 | + /> | |
151 | + {props.isSubmitted() && props.errors && props.errors.rollNo && ( | |
152 | + <ErrorLabel> {props.errors.rollNo} </ErrorLabel> | |
153 | + )} | |
154 | + </FormGroup> | |
155 | + </Col> | |
156 | + <Col xs={12} sm={6}> | |
157 | + <FormGroup controlId="class"> | |
158 | + <Label required>Class</Label> | |
159 | + <FormControl | |
160 | + type="text" | |
161 | + value={props.getValue('studentClass')} | |
162 | + placeholder="7" | |
163 | + onChange={e => props.setValue('studentClass', e.target.value)} | |
164 | + /> | |
165 | + {props.isSubmitted() && props.errors && props.errors.studentClass && ( | |
166 | + <ErrorLabel> {props.errors.studentClass} </ErrorLabel> | |
167 | + )} | |
168 | + </FormGroup> | |
169 | + </Col> | |
170 | + </Row> | |
171 | + <Row> | |
172 | + <Col xs={12} sm={6}> | |
173 | + <FormGroup controlId="section"> | |
174 | + <Label required>Section</Label> | |
175 | + <FormControl | |
176 | + type="text" | |
177 | + value={props.getValue('section')} | |
178 | + placeholder="B" | |
179 | + onChange={e => props.setValue('section', e.target.value)} | |
180 | + /> | |
181 | + {props.isSubmitted() && props.errors && props.errors.section && ( | |
182 | + <ErrorLabel> {props.errors.section} </ErrorLabel> | |
183 | + )} | |
184 | + </FormGroup> | |
185 | + </Col> | |
186 | + <Col xs={12} sm={6}> | |
187 | + <FormGroup controlId="community"> | |
188 | + <Label required>Community</Label> | |
189 | + <FormControl | |
190 | + type="text" | |
191 | + value={props.getValue('community')} | |
192 | + placeholder="General" | |
193 | + onChange={e => props.setValue('community', e.target.value)} | |
194 | + /> | |
195 | + {props.isSubmitted() && props.errors && props.errors.community && ( | |
196 | + <ErrorLabel> {props.errors.community} </ErrorLabel> | |
197 | + )} | |
198 | + </FormGroup> | |
199 | + </Col> | |
200 | + </Row> | |
201 | + <Row> | |
202 | + <Col xs={12} sm={6}> | |
203 | + <FormGroup controlId="bloodGroup"> | |
204 | + <Label required>bloodGroup</Label> | |
205 | + <FormControl | |
206 | + type="text" | |
207 | + value={props.getValue('bloodGroup')} | |
208 | + placeholder="B+" | |
209 | + onChange={e => props.setValue('bloodGroup', e.target.value)} | |
210 | + /> | |
211 | + {props.isSubmitted() && props.errors && props.errors.bloodGroup && ( | |
212 | + <ErrorLabel> {props.errors.bloodGroup} </ErrorLabel> | |
213 | + )} | |
214 | + </FormGroup> | |
215 | + </Col> | |
216 | + <Col xs={12} sm={6}> | |
217 | + <FormGroup controlId="phone"> | |
218 | + <Label required>Phone</Label> | |
219 | + <FormControl | |
220 | + type="text" | |
221 | + value={props.getValue('phone')} | |
222 | + placeholder="9999999999" | |
223 | + onChange={e => props.setValue('phone', e.target.value)} | |
224 | + /> | |
225 | + {props.isSubmitted() && props.errors && props.errors.phone && ( | |
226 | + <ErrorLabel> {props.errors.phone} </ErrorLabel> | |
227 | + )} | |
228 | + </FormGroup> | |
229 | + </Col> | |
230 | + </Row> | |
231 | + </fieldset> | |
232 | + )} | |
233 | + {props.currentStep === 2 && ( | |
234 | + <fieldset title="Address"> | |
235 | + <legend className="text-semibold">Address</legend> | |
236 | + <Row> | |
237 | + <Col xs={12} sm={6}> | |
238 | + <FormGroup controlId="address"> | |
239 | + <Label required>Address</Label> | |
240 | + <FormControl | |
241 | + type="text" | |
242 | + value={props.getValue('address')} | |
243 | + placeholder="#876, Street, town" | |
244 | + onChange={e => props.setValue('address', e.target.value)} | |
245 | + /> | |
246 | + {props.isSubmitted() && props.errors && props.errors.address && ( | |
247 | + <ErrorLabel> {props.errors.address} </ErrorLabel> | |
248 | + )} | |
249 | + </FormGroup> | |
250 | + </Col> | |
251 | + <Col xs={12} sm={6}> | |
252 | + <FormGroup controlId="city"> | |
253 | + <Label required>City</Label> | |
254 | + <FormControl | |
255 | + type="text" | |
256 | + value={props.getValue('city')} | |
257 | + placeholder="Chennai" | |
258 | + onChange={e => props.setValue('city', e.target.value)} | |
259 | + /> | |
260 | + {props.isSubmitted() && props.errors && props.errors.city && ( | |
261 | + <ErrorLabel> {props.errors.city} </ErrorLabel> | |
262 | + )} | |
263 | + </FormGroup> | |
264 | + </Col> | |
265 | + </Row> | |
266 | + <Row> | |
267 | + <Col xs={12} sm={6}> | |
268 | + <FormGroup controlId="state"> | |
269 | + <Label required>State</Label> | |
270 | + <FormControl | |
271 | + type="text" | |
272 | + value={props.getValue('state')} | |
273 | + placeholder="Tamilnadu" | |
274 | + onChange={e => props.setValue('state', e.target.value)} | |
275 | + /> | |
276 | + {props.isSubmitted() && props.errors && props.errors.state && ( | |
277 | + <ErrorLabel> {props.errors.state} </ErrorLabel> | |
278 | + )} | |
279 | + </FormGroup> | |
280 | + </Col> | |
281 | + </Row> | |
282 | + </fieldset> | |
283 | + )} | |
284 | + {props.currentStep === 3 && ( | |
285 | + <fieldset title="2"> | |
286 | + <legend className="text-semibold">Parent information</legend> | |
287 | + <Row> | |
288 | + <Col xs={12} sm={6}> | |
289 | + <FormGroup controlId="parentName"> | |
290 | + <Label required>Parent Name</Label> | |
291 | + <FormControl | |
292 | + type="text" | |
293 | + value={props.getValue('parentName')} | |
294 | + placeholder="John" | |
295 | + onChange={e => props.setValue('parentName', e.target.value)} | |
296 | + /> | |
297 | + {props.isSubmitted() && props.errors && props.errors.parentName && ( | |
298 | + <ErrorLabel> {props.errors.parentName} </ErrorLabel> | |
299 | + )} | |
300 | + </FormGroup> | |
301 | + </Col> | |
302 | + <Col xs={12} sm={6}> | |
303 | + <FormGroup controlId="parentEmail"> | |
304 | + <Label required>Parent Email</Label> | |
305 | + <FormControl | |
306 | + type="text" | |
307 | + value={props.getValue('parentEmail')} | |
308 | + placeholder="john@email.com" | |
309 | + onChange={e => props.setValue('parentEmail', e.target.value)} | |
310 | + /> | |
311 | + {props.isSubmitted() && props.errors && props.errors.parentEmail && ( | |
312 | + <ErrorLabel> {props.errors.parentEmail} </ErrorLabel> | |
313 | + )} | |
314 | + </FormGroup> | |
315 | + </Col> | |
316 | + </Row> | |
317 | + <Row> | |
318 | + <Col xs={12} sm={6}> | |
319 | + <FormGroup controlId="relation"> | |
320 | + <Label required>Relation</Label> | |
321 | + <FormControl | |
322 | + type="text" | |
323 | + value={props.getValue('relation')} | |
324 | + placeholder="Father" | |
325 | + onChange={e => props.setValue('relation', e.target.value)} | |
326 | + /> | |
327 | + {props.isSubmitted() && props.errors && props.errors.relation && ( | |
328 | + <ErrorLabel> {props.errors.relation} </ErrorLabel> | |
329 | + )} | |
330 | + </FormGroup> | |
331 | + </Col> | |
332 | + <Col xs={12} sm={6}> | |
333 | + <FormGroup controlId="profession"> | |
334 | + <Label required>Profession</Label> | |
335 | + <FormControl | |
336 | + type="text" | |
337 | + value={props.getValue('profession')} | |
338 | + placeholder="Farmer" | |
339 | + onChange={e => props.setValue('profession', e.target.value)} | |
340 | + /> | |
341 | + {props.isSubmitted() && props.errors && props.errors.profession && ( | |
342 | + <ErrorLabel> {props.errors.profession} </ErrorLabel> | |
343 | + )} | |
344 | + </FormGroup> | |
345 | + </Col> | |
346 | + </Row> | |
347 | + <Row> | |
348 | + <Col xs={12} sm={6}> | |
349 | + <FormGroup controlId="parentGender"> | |
350 | + <Label>Parent Gender</Label> | |
351 | + <FormControl componentClass="select" | |
352 | + placeholder="select" | |
353 | + value={props.getValue('parentGender')} | |
354 | + onChange={e => props.setValue('parentGender', e.target.value)} | |
355 | + > | |
356 | + <option value="male">Male</option> | |
357 | + <option value="female">Female</option> | |
358 | + </FormControl> | |
359 | + {props.isSubmitted() && props.errors && props.errors.parentGender && ( | |
360 | + <ErrorLabel> {props.errors.parentGender} </ErrorLabel> | |
361 | + )} | |
362 | + </FormGroup> | |
363 | + </Col> | |
364 | + <Col xs={12} sm={6}> | |
365 | + <FormGroup controlId="parentPhone"> | |
366 | + <Label required>Parent Phone</Label> | |
367 | + <FormControl | |
368 | + type="text" | |
369 | + value={props.getValue('parentPhone')} | |
370 | + placeholder="9876543210" | |
371 | + onChange={e => props.setValue('parentPhone', e.target.value)} | |
372 | + /> | |
373 | + {props.isSubmitted() && props.errors && props.errors.parentPhone && ( | |
374 | + <ErrorLabel> {props.errors.parentPhone} </ErrorLabel> | |
375 | + )} | |
376 | + </FormGroup> | |
377 | + </Col> | |
378 | + </Row> | |
379 | + <Row> | |
380 | + <Col xs={12} sm={6}> | |
381 | + <FormGroup controlId="parentAddress"> | |
382 | + <Label required>Parent Address</Label> | |
383 | + <FormControl | |
384 | + type="text" | |
385 | + value={props.getValue('parentAddress')} | |
386 | + placeholder="#12, street, town" | |
387 | + onChange={e => props.setValue('parentAddress', e.target.value)} | |
388 | + /> | |
389 | + {props.isSubmitted() && props.errors && props.errors.parentAddress && ( | |
390 | + <ErrorLabel> {props.errors.parentAddress} </ErrorLabel> | |
391 | + )} | |
392 | + </FormGroup> | |
393 | + </Col> | |
394 | + <Col xs={12} sm={6}> | |
395 | + <FormGroup controlId="parentCity"> | |
396 | + <Label required>Parent City</Label> | |
397 | + <FormControl | |
398 | + type="text" | |
399 | + value={props.getValue('parentCity')} | |
400 | + placeholder="Chennai" | |
401 | + onChange={e => props.setValue('parentCity', e.target.value)} | |
402 | + /> | |
403 | + {props.isSubmitted() && props.errors && props.errors.parentCity && ( | |
404 | + <ErrorLabel> {props.errors.parentCity} </ErrorLabel> | |
405 | + )} | |
406 | + </FormGroup> | |
407 | + </Col> | |
408 | + </Row> | |
409 | + <Row> | |
410 | + <Col xs={12} sm={6}> | |
411 | + <FormGroup controlId="parentState"> | |
412 | + <Label required>Parent State</Label> | |
413 | + <FormControl | |
414 | + type="text" | |
415 | + value={props.getValue('parentState')} | |
416 | + placeholder="600031" | |
417 | + onChange={e => props.setValue('parentState', e.target.value)} | |
418 | + /> | |
419 | + {props.isSubmitted() && props.errors && props.errors.parentState && ( | |
420 | + <ErrorLabel> {props.errors.parentState} </ErrorLabel> | |
421 | + )} | |
422 | + </FormGroup> | |
423 | + </Col> | |
424 | + <Col xs={12} sm={6}> | |
425 | + <FormGroup controlId="parentZipcode"> | |
426 | + <Label required>Parent Zipcode</Label> | |
427 | + <FormControl | |
428 | + type="text" | |
429 | + value={props.getValue('parentZipcode')} | |
430 | + placeholder="600031" | |
431 | + onChange={e => props.setValue('parentZipcode', e.target.value)} | |
432 | + /> | |
433 | + {props.isSubmitted() && props.errors && props.errors.parentZipcode && ( | |
434 | + <ErrorLabel> {props.errors.parentZipcode} </ErrorLabel> | |
435 | + )} | |
436 | + </FormGroup> | |
437 | + </Col> | |
438 | + </Row> | |
439 | + </fieldset> | |
440 | + )} | |
441 | + <div style={{ textAlign: 'left' }}> | |
442 | + {props.currentStep > 0 && ( | |
443 | + <div style={{ display: 'inline-block', marginRight: 10 }}> | |
444 | + <Button onClick={props.onBackClick}> | |
445 | + <i className="icon-arrow-left13 position-left"></i> | |
446 | + BACK | |
447 | + </Button> | |
448 | + | |
449 | + </div> | |
450 | + )} | |
451 | + {props.currentStep < 3 && ( | |
452 | + <div style={{ display: 'inline-block' }}> | |
453 | + <Button | |
454 | + bsStyle="primary" | |
455 | + onClick={props.onNextClick} | |
456 | + > | |
457 | + NEXT | |
458 | + <i className="icon-arrow-right14 position-right" /> | |
459 | + </Button> | |
460 | + </div> | |
461 | + )} | |
462 | + {props.currentStep === 3 && ( | |
463 | + <div style={{ display: 'inline-block' }}> | |
464 | + <Button | |
465 | + bsStyle="primary" | |
466 | + onClick={props.onNextClick} | |
467 | + > | |
468 | + SAVE | |
469 | + <i className="fa fa-check" /> | |
470 | + </Button> | |
471 | + </div> | |
472 | + )} | |
473 | + </div> | |
474 | + </div> | |
475 | +) | |
476 | + | |
477 | +StudentForm.propTypes = { | |
478 | + currentStep: PropTypes.number.isRequired, | |
479 | + onNextClick: PropTypes.func.isRequired, | |
480 | + onBackClick: PropTypes.func.isRequired, | |
481 | + setValue: PropTypes.func.isRequired, | |
482 | + getValue: PropTypes.func.isRequired, | |
483 | +} | |
484 | + | |
485 | +export default StudentForm | ... | ... |
imports/client/views/org/admin/students/add/addStudent.js
... | ... | @@ -0,0 +1,63 @@ |
1 | +import _ from 'lodash'; | |
2 | +import { Meteor } from 'meteor/meteor'; | |
3 | +import React, { Component } from 'react'; | |
4 | +import { Link,browserHistory } from 'react-router'; | |
5 | +import { FormGroup,Panel,Table, | |
6 | + ButtonToolbar,Modal, | |
7 | + FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
8 | +import { AddStudentFormContainer } from './AddStudentFormContainer'; | |
9 | + | |
10 | +const style = { | |
11 | + margin: 12, | |
12 | +}; | |
13 | +export class AddStudent extends Component { | |
14 | + constructor(props) { | |
15 | + super(props); | |
16 | + this.state = { | |
17 | + show: false | |
18 | + }; | |
19 | + this.showModal = this.showModal.bind(this); | |
20 | + this.hideModal = this.hideModal.bind(this); | |
21 | + this.onUpdate = this.onUpdate.bind(this); | |
22 | + }; | |
23 | + | |
24 | + showModal() { | |
25 | + this.setState({show: true}); | |
26 | + } | |
27 | + | |
28 | + hideModal() { | |
29 | + this.setState({show: false}); | |
30 | + } | |
31 | + onUpdate(key, value) { | |
32 | + this.setState({[key]: value}); | |
33 | + }; | |
34 | + | |
35 | + render() { | |
36 | + return ( | |
37 | + <ButtonToolbar> | |
38 | + <Button bsStyle="primary" onClick={this.showModal}> | |
39 | + Add Student | |
40 | + </Button> | |
41 | + <Modal | |
42 | + {...this.props} | |
43 | + show={this.state.show} | |
44 | + onHide={this.hideModal} | |
45 | + dialogClassName="custom-modal" | |
46 | + > | |
47 | + <Modal.Header closeButton> | |
48 | + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title> | |
49 | + </Modal.Header> | |
50 | + <Modal.Body> | |
51 | + <AddStudentFormContainer /> | |
52 | + </Modal.Body> | |
53 | + {/* | |
54 | + <Modal.Footer> | |
55 | + <Button onClick={this.hideModal}>Close</Button> | |
56 | + </Modal.Footer> | |
57 | + */} | |
58 | + </Modal> | |
59 | + </ButtonToolbar> | |
60 | + ); | |
61 | + }; | |
62 | + | |
63 | +}; | ... | ... |
imports/client/views/org/admin/students/add/addStudentForm.js
... | ... | @@ -0,0 +1,500 @@ |
1 | +import _ from 'lodash'; | |
2 | +import { Meteor } from 'meteor/meteor'; | |
3 | + | |
4 | +import React, { Component } from 'react'; | |
5 | +import { Link,browserHistory } from 'react-router'; | |
6 | +import { Form, FormGroup,InputGroup, | |
7 | + DropdownButton,MenuItem,ControlLabel, | |
8 | + SplitButton, | |
9 | + FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
10 | +import DatePicker from 'react-bootstrap-date-picker' | |
11 | +import {addStudentManually} from '/imports/collections/students/methods'; | |
12 | + | |
13 | +export class AddStudentForm extends Component { | |
14 | + | |
15 | + constructor(props) { | |
16 | + super(props); | |
17 | + this.state = { | |
18 | + admissionId: "123", | |
19 | + firstName: "first", | |
20 | + lastName: "last", | |
21 | + middleName: "middle", | |
22 | + email: "deepak125.dk+21@gmail.com", | |
23 | + dob: "", | |
24 | + formattedDob: "", | |
25 | + gender: "male", | |
26 | + rollNo: "1", | |
27 | + class: "2", | |
28 | + section: "B", | |
29 | + community: "SC", | |
30 | + bloodGroup: "B+", | |
31 | + phone: "9876543321", | |
32 | + address: "address", | |
33 | + city: "chennai", | |
34 | + state: "tn", | |
35 | + parentName: "parentName", | |
36 | + parentEmail: "deepak125.dk+41@gmail.com", | |
37 | + relation: "father", | |
38 | + profession: "farmer", | |
39 | + parentGender: "male", | |
40 | + parentPhone: "987655412", | |
41 | + parentAddress: "parentAddress", | |
42 | + parentCity: "parentCity", | |
43 | + parentState: "parentState", | |
44 | + parentZipcode: "parentZipcode", | |
45 | + }; | |
46 | + this.onUpdate = this.onUpdate.bind(this); | |
47 | + this.handleDob = this.handleDob.bind(this); | |
48 | + }; | |
49 | + | |
50 | + onUpdate(key, value) { | |
51 | + this.setState({[key]: value}); | |
52 | + }; | |
53 | + | |
54 | + handleDob(value, formattedValue) { | |
55 | + this.setState({ | |
56 | + dob: value, // ISO String, ex: "2016-11-19T12:00:00.000Z" | |
57 | + formattedDob: formattedValue // Formatted String, ex: "11/19/2016" | |
58 | + }); | |
59 | +} | |
60 | + addStudent(e){ | |
61 | + e.preventDefault(); | |
62 | + e.persist(); | |
63 | + const firstName = this.state.firstName; | |
64 | + const middleName = this.state.middleName; | |
65 | + const lastName = this.state.lastName; | |
66 | + const admissionId = this.state.admissionId; | |
67 | + const email = this.state.email; | |
68 | + const dob = this.state.dob; | |
69 | + const formattedDob = this.state.formattedDob; | |
70 | + const gender = this.state.gender; | |
71 | + const rollNo = this.state.rollNo; | |
72 | + const studentclass = this.state.class; | |
73 | + const section = this.state.section; | |
74 | + const community = this.state.community; | |
75 | + const bloodGroup = this.state.bloodGroup; | |
76 | + const phone = this.state.phone; | |
77 | + const address = this.state.address; | |
78 | + const city = this.state.city; | |
79 | + const state = this.state.state; | |
80 | + const parentName = this.state.parentName; | |
81 | + const parentEmail = this.state.parentEmail; | |
82 | + const relation = this.state.relation; | |
83 | + const profession = this.state.profession; | |
84 | + const parentGender = this.state.parentGender; | |
85 | + const parentPhone = this.state.parentPhone; | |
86 | + const parentAddress = this.state.parentAddress; | |
87 | + const parentCity = this.state.parentCity; | |
88 | + const parentState = this.state.parentState; | |
89 | + const parentZipcode = this.state.parentZipcode; | |
90 | + if(admissionId==""){ | |
91 | + Bert.alert('Enter Admission Id!', 'danger'); | |
92 | + }else if(firstName==""){ | |
93 | + Bert.alert('Enter Fist Name', 'danger'); | |
94 | + } else if(middleName==""){ | |
95 | + Bert.alert('Enter Middle name!', 'danger'); | |
96 | + }else if(lastName==""){ | |
97 | + Bert.alert('Enter Last name!', 'danger'); | |
98 | + }else if(email==""){ | |
99 | + Bert.alert('Enter email!', 'danger'); | |
100 | + }else if(dob==""){ | |
101 | + Bert.alert('Enter DOB!', 'danger'); | |
102 | + }else if(gender==""){ | |
103 | + Bert.alert('Enter Student Gender!', 'danger'); | |
104 | + }else if(studentclass==""){ | |
105 | + Bert.alert('Enter Class!', 'danger'); | |
106 | + }else if(section==""){ | |
107 | + Bert.alert('Enter Section!', 'danger'); | |
108 | + }else if(community==""){ | |
109 | + Bert.alert('Enter Section!', 'danger'); | |
110 | + }else if(bloodGroup==""){ | |
111 | + Bert.alert('Enter Blood Group!', 'danger'); | |
112 | + }else if(phone==""){ | |
113 | + Bert.alert('Enter phone!', 'danger'); | |
114 | + }else if(address==""){ | |
115 | + Bert.alert('Enter address!', 'danger'); | |
116 | + }else if(city==""){ | |
117 | + Bert.alert('Enter city!', 'danger'); | |
118 | + }else if(state==""){ | |
119 | + Bert.alert('Enter state!', 'danger'); | |
120 | + }else if(parentName==""){ | |
121 | + Bert.alert('Enter Parent name!', 'danger'); | |
122 | + }else if(parentEmail==""){ | |
123 | + Bert.alert('Enter Parent Email!', 'danger'); | |
124 | + }else if(relation==""){ | |
125 | + Bert.alert('Enter relation!', 'danger'); | |
126 | + }else if(profession==""){ | |
127 | + Bert.alert('Enter parent profession!', 'danger'); | |
128 | + }else if(parentGender==""){ | |
129 | + Bert.alert("Enter Parent's Gender!", 'danger'); | |
130 | + }else if(parentPhone==""){ | |
131 | + Bert.alert("Enter Parent's Phone!", 'danger'); | |
132 | + }else if(parentAddress==""){ | |
133 | + Bert.alert("Enter Parent's Address!", 'danger'); | |
134 | + }else if(parentCity==""){ | |
135 | + Bert.alert("Enter Parent's City!", 'danger'); | |
136 | + }else if(parentState==""){ | |
137 | + Bert.alert("Enter Parent's State!", 'danger'); | |
138 | + }else if(parentZipcode==""){ | |
139 | + Bert.alert("Enter Parent's zipcode!", 'danger'); | |
140 | + }else{ | |
141 | + addStudentManually.call({ | |
142 | + admissionId, | |
143 | + firstName, | |
144 | + middleName, | |
145 | + lastName, | |
146 | + email, | |
147 | + dob, | |
148 | + formattedDob, | |
149 | + gender, | |
150 | + rollNo, | |
151 | + studentclass, | |
152 | + section, | |
153 | + community, | |
154 | + bloodGroup, | |
155 | + phone, | |
156 | + address, | |
157 | + city, | |
158 | + state, | |
159 | + parentName, | |
160 | + parentEmail, | |
161 | + relation, | |
162 | + profession, | |
163 | + parentGender, | |
164 | + parentPhone, | |
165 | + parentAddress, | |
166 | + parentCity, | |
167 | + parentState, | |
168 | + parentZipcode | |
169 | + }, function (error, result) { | |
170 | + console.log(error); | |
171 | + console.log(result); | |
172 | + }); | |
173 | + } | |
174 | + } | |
175 | + render() { | |
176 | + return ( | |
177 | + <Form className="steps-validation wizard clearfix" onSubmit={ (e) => this.addStudent(e) } inline> | |
178 | + <div className="steps clearfix"> | |
179 | + <ul role="tablist"> | |
180 | + <li role="tab" className="first current" aria-disabled="false" aria-selected="true"> | |
181 | + <a id="steps-uid-4-t-0" href="#steps-uid-4-h-0" aria-controls="steps-uid-4-p-0"> | |
182 | + <span className="current-info audible">current step: </span><span className="number">1</span> Personal data | |
183 | + </a> | |
184 | + </li> | |
185 | + <li role="tab" className="disabled" aria-disabled="true"> | |
186 | + <a id="steps-uid-4-t-1" href="#steps-uid-4-h-1" aria-controls="steps-uid-4-p-1"> | |
187 | + <span className="number">2</span> Your education\n\ | |
188 | + </a> | |
189 | + </li> | |
190 | + <li role="tab" className="disabled" aria-disabled="true"> | |
191 | + <a id="steps-uid-4-t-2" href="#steps-uid-4-h-2" aria-controls="steps-uid-4-p-2"> | |
192 | + <span className="number">3</span> Your experience | |
193 | + </a> | |
194 | + </li> | |
195 | + <li role="tab" className="disabled last" aria-disabled="true"> | |
196 | + <a id="steps-uid-4-t-3" href="#steps-uid-4-h-3" aria-controls="steps-uid-4-p-3"> | |
197 | + <span className="number">4</span> Additional info | |
198 | + </a> | |
199 | + </li> | |
200 | + </ul> | |
201 | + </div> | |
202 | + <div className="content clearfix"> | |
203 | + <h6 id="steps-uid-4-h-0" tabindex="-1" className="title current">Personal data</h6> | |
204 | + <div id="steps-uid-4-p-0" role="tabpanel" aria-labelledby="steps-uid-4-h-0" className="body current"> | |
205 | + <div className="row"> | |
206 | + <div className="col-md-6"> | |
207 | + | |
208 | + <FormGroup controlId="admissionId"> | |
209 | + <ControlLabel>Admission Id</ControlLabel> | |
210 | + <FormControl | |
211 | + type="text" | |
212 | + value={this.state.admissionId} | |
213 | + placeholder="admission Id" | |
214 | + onChange={e=>this.onUpdate('admissionId',e.target.value)} | |
215 | + /> | |
216 | + </FormGroup> | |
217 | + | |
218 | + </div> | |
219 | + | |
220 | + <div className="col-md-6"> | |
221 | + | |
222 | + <FormGroup controlId="firstName"> | |
223 | + <ControlLabel>First Name</ControlLabel> | |
224 | + <FormControl | |
225 | + type="text" | |
226 | + value={this.state.firstName} | |
227 | + placeholder="First Name" | |
228 | + onChange={e=>this.onUpdate('firstName',e.target.value)} | |
229 | + /> | |
230 | + </FormGroup> | |
231 | + | |
232 | + </div> | |
233 | + </div> | |
234 | + </div> | |
235 | + </div> | |
236 | + | |
237 | + | |
238 | + <FormGroup controlId="admissionId"> | |
239 | + <ControlLabel>Admission Id</ControlLabel> | |
240 | + <FormControl | |
241 | + type="text" | |
242 | + value={this.state.admissionId} | |
243 | + placeholder="admission Id" | |
244 | + onChange={e=>this.onUpdate('admissionId',e.target.value)} | |
245 | + /> | |
246 | + </FormGroup> | |
247 | + | |
248 | + <FormGroup controlId="firstName"> | |
249 | + <ControlLabel>First Name</ControlLabel> | |
250 | + <FormControl | |
251 | + type="text" | |
252 | + value={this.state.firstName} | |
253 | + placeholder="First Name" | |
254 | + onChange={e=>this.onUpdate('firstName',e.target.value)} | |
255 | + /> | |
256 | + </FormGroup> | |
257 | + <FormGroup controlId="middleName"> | |
258 | + <ControlLabel>Middle Name</ControlLabel> | |
259 | + <FormControl | |
260 | + type="text" | |
261 | + value={this.state.middleName} | |
262 | + placeholder="Middle Name" | |
263 | + onChange={e=>this.onUpdate('middleName',e.target.value)} | |
264 | + /> | |
265 | + </FormGroup> | |
266 | + | |
267 | + <FormGroup controlId="lastName"> | |
268 | + <ControlLabel>Last Name</ControlLabel> | |
269 | + <FormControl | |
270 | + type="text" | |
271 | + value={this.state.lastName} | |
272 | + placeholder="Last Name" | |
273 | + onChange={e=>this.onUpdate('lastName',e.target.value)} | |
274 | + /> | |
275 | + | |
276 | + </FormGroup> | |
277 | + <FormGroup controlId="email"> | |
278 | + <ControlLabel>Email</ControlLabel> | |
279 | + <FormControl | |
280 | + type="email" | |
281 | + value={this.state.email} | |
282 | + placeholder="Email" | |
283 | + onChange={e=>this.onUpdate('email',e.target.value)} | |
284 | + /> | |
285 | + </FormGroup> | |
286 | + <FormGroup> | |
287 | + <ControlLabel>Date of birth</ControlLabel> | |
288 | + <DatePicker id="dob" | |
289 | + value={this.state.dob} | |
290 | + onChange={this.handleDob} | |
291 | + /> | |
292 | + </FormGroup> | |
293 | + | |
294 | + <FormGroup controlId="formControlsSelect"> | |
295 | + <ControlLabel>Gender</ControlLabel> | |
296 | + <FormControl componentClass="select" | |
297 | + placeholder="select" | |
298 | + value={this.state.gender} | |
299 | + onChange={e=>this.onUpdate('gender',e.target.value)} | |
300 | + > | |
301 | + <option value="male">Male</option> | |
302 | + <option value="female">Female</option> | |
303 | + </FormControl> | |
304 | + </FormGroup> | |
305 | + | |
306 | + <FormGroup controlId="rollNo"> | |
307 | + <ControlLabel>Roll No</ControlLabel> | |
308 | + <FormControl | |
309 | + type="text" | |
310 | + value={this.state.rollNo} | |
311 | + placeholder="Roll No" | |
312 | + onChange={e=>this.onUpdate('rollNo',e.target.value)} | |
313 | + /> | |
314 | + </FormGroup> | |
315 | + <FormGroup controlId="class"> | |
316 | + <ControlLabel>Class</ControlLabel> | |
317 | + <FormControl | |
318 | + type="text" | |
319 | + value={this.state.class} | |
320 | + placeholder="7" | |
321 | + onChange={e=>this.onUpdate('class',e.target.value)} | |
322 | + /> | |
323 | + </FormGroup> | |
324 | + <FormGroup controlId="section"> | |
325 | + <ControlLabel>Section</ControlLabel> | |
326 | + <FormControl | |
327 | + type="text" | |
328 | + value={this.state.section} | |
329 | + placeholder="B" | |
330 | + onChange={e=>this.onUpdate('section',e.target.value)} | |
331 | + /> | |
332 | + </FormGroup> | |
333 | + | |
334 | + <FormGroup controlId="community"> | |
335 | + <ControlLabel>Community</ControlLabel> | |
336 | + <FormControl | |
337 | + type="text" | |
338 | + value={this.state.community} | |
339 | + placeholder="General" | |
340 | + onChange={e=>this.onUpdate('community',e.target.value)} | |
341 | + /> | |
342 | + </FormGroup> | |
343 | + | |
344 | + <FormGroup controlId="bloodGroup"> | |
345 | + <ControlLabel>bloodGroup</ControlLabel> | |
346 | + <FormControl | |
347 | + type="text" | |
348 | + value={this.state.bloodGroup} | |
349 | + placeholder="B+" | |
350 | + onChange={e=>this.onUpdate('bloodGroup',e.target.value)} | |
351 | + /> | |
352 | + </FormGroup> | |
353 | + | |
354 | + <FormGroup controlId="phone"> | |
355 | + <ControlLabel>Phone</ControlLabel> | |
356 | + <FormControl | |
357 | + type="text" | |
358 | + value={this.state.phone} | |
359 | + placeholder="9999999999" | |
360 | + onChange={e=>this.onUpdate('phone',e.target.value)} | |
361 | + /> | |
362 | + </FormGroup> | |
363 | + | |
364 | + <FormGroup controlId="address"> | |
365 | + <ControlLabel>Address</ControlLabel> | |
366 | + <FormControl | |
367 | + type="text" | |
368 | + value={this.state.address} | |
369 | + placeholder="#876, Street, town" | |
370 | + onChange={e=>this.onUpdate('address',e.target.value)} | |
371 | + /> | |
372 | + </FormGroup> | |
373 | + | |
374 | + <FormGroup controlId="city"> | |
375 | + <ControlLabel>City</ControlLabel> | |
376 | + <FormControl | |
377 | + type="text" | |
378 | + value={this.state.city} | |
379 | + placeholder="Chennai" | |
380 | + onChange={e=>this.onUpdate('city',e.target.value)} | |
381 | + /> | |
382 | + </FormGroup> | |
383 | + | |
384 | + <FormGroup controlId="state"> | |
385 | + <ControlLabel>State</ControlLabel> | |
386 | + <FormControl | |
387 | + type="text" | |
388 | + value={this.state.state} | |
389 | + placeholder="Tamilnadu" | |
390 | + onChange={e=>this.onUpdate('state',e.target.value)} | |
391 | + /> | |
392 | + </FormGroup> | |
393 | + | |
394 | + <FormGroup controlId="parentName"> | |
395 | + <ControlLabel>Parent Name</ControlLabel> | |
396 | + <FormControl | |
397 | + type="text" | |
398 | + value={this.state.parentName} | |
399 | + placeholder="John" | |
400 | + onChange={e=>this.onUpdate('parentName',e.target.value)} | |
401 | + /> | |
402 | + </FormGroup> | |
403 | + | |
404 | + <FormGroup controlId="parentEmail"> | |
405 | + <ControlLabel>Parent Email</ControlLabel> | |
406 | + <FormControl | |
407 | + type="text" | |
408 | + value={this.state.parentEmail} | |
409 | + placeholder="john@email.com" | |
410 | + onChange={e=>this.onUpdate('parentEmail',e.target.value)} | |
411 | + /> | |
412 | + </FormGroup> | |
413 | + | |
414 | + <FormGroup controlId="relation"> | |
415 | + <ControlLabel>Relation</ControlLabel> | |
416 | + <FormControl | |
417 | + type="text" | |
418 | + value={this.state.relation} | |
419 | + placeholder="Father" | |
420 | + onChange={e=>this.onUpdate('relation',e.target.value)} | |
421 | + /> | |
422 | + </FormGroup> | |
423 | + | |
424 | + <FormGroup controlId="profession"> | |
425 | + <ControlLabel>Profession</ControlLabel> | |
426 | + <FormControl | |
427 | + type="text" | |
428 | + value={this.state.profession} | |
429 | + placeholder="Farmer" | |
430 | + onChange={e=>this.onUpdate('profession',e.target.value)} | |
431 | + /> | |
432 | + </FormGroup> | |
433 | + | |
434 | + <FormGroup controlId="parentGender"> | |
435 | + <ControlLabel>Parent Gender</ControlLabel> | |
436 | + <FormControl componentClass="select" | |
437 | + placeholder="select" | |
438 | + value={this.state.parentGender} | |
439 | + onChange={e=>this.onUpdate('parentGender',e.target.value)} | |
440 | + > | |
441 | + <option value="male">Male</option> | |
442 | + <option value="female">Female</option> | |
443 | + </FormControl> | |
444 | + </FormGroup> | |
445 | + | |
446 | + <FormGroup controlId="parentPhone"> | |
447 | + <ControlLabel>Parent Phone</ControlLabel> | |
448 | + <FormControl | |
449 | + type="text" | |
450 | + value={this.state.parentPhone} | |
451 | + placeholder="9876543210" | |
452 | + onChange={e=>this.onUpdate('parentPhone',e.target.value)} | |
453 | + /> | |
454 | + </FormGroup> | |
455 | + | |
456 | + <FormGroup controlId="parentAddress"> | |
457 | + <ControlLabel>Parent Address</ControlLabel> | |
458 | + <FormControl | |
459 | + type="text" | |
460 | + value={this.state.parentAddress} | |
461 | + placeholder="#12, street, town" | |
462 | + onChange={e=>this.onUpdate('parentAddress',e.target.value)} | |
463 | + /> | |
464 | + </FormGroup> | |
465 | + | |
466 | + <FormGroup controlId="parentCity"> | |
467 | + <ControlLabel>Parent City</ControlLabel> | |
468 | + <FormControl | |
469 | + type="text" | |
470 | + value={this.state.parentCity} | |
471 | + placeholder="Chennai" | |
472 | + onChange={e=>this.onUpdate('parentCity',e.target.value)} | |
473 | + /> | |
474 | + </FormGroup> | |
475 | + | |
476 | + <FormGroup controlId="parentState"> | |
477 | + <ControlLabel>Parent State</ControlLabel> | |
478 | + <FormControl | |
479 | + type="text" | |
480 | + value={this.state.parentState} | |
481 | + placeholder="Tamilnadu" | |
482 | + onChange={e=>this.onUpdate('parentState',e.target.value)} | |
483 | + /> | |
484 | + </FormGroup> | |
485 | + | |
486 | + <FormGroup controlId="parentZipcode"> | |
487 | + <ControlLabel>Parent Zipcode</ControlLabel> | |
488 | + <FormControl | |
489 | + type="text" | |
490 | + value={this.state.parentZipcode} | |
491 | + placeholder="600031" | |
492 | + onChange={e=>this.onUpdate('parentZipcode',e.target.value)} | |
493 | + /> | |
494 | + </FormGroup> | |
495 | + <Button type="submit" bsStyle="default">Add Student</Button> | |
496 | + </Form> | |
497 | + ); | |
498 | + }; | |
499 | + | |
500 | +}; | ... | ... |
imports/client/views/org/admin/students/addStudent.js
... | ... | @@ -1,64 +0,0 @@ |
1 | -import _ from 'lodash'; | |
2 | -import { Meteor } from 'meteor/meteor'; | |
3 | -import './student.css' | |
4 | -import React, { Component } from 'react'; | |
5 | -import { Link,browserHistory } from 'react-router'; | |
6 | -import { FormGroup,Panel,Table, | |
7 | - ButtonToolbar,Modal, | |
8 | - FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
9 | -import { AddStudentFormContainer } from './AddStudentFormContainer'; | |
10 | - | |
11 | -const style = { | |
12 | - margin: 12, | |
13 | -}; | |
14 | -export class AddStudent extends Component { | |
15 | - constructor(props) { | |
16 | - super(props); | |
17 | - this.state = { | |
18 | - show: false | |
19 | - }; | |
20 | - this.showModal = this.showModal.bind(this); | |
21 | - this.hideModal = this.hideModal.bind(this); | |
22 | - this.onUpdate = this.onUpdate.bind(this); | |
23 | - }; | |
24 | - | |
25 | - showModal() { | |
26 | - this.setState({show: true}); | |
27 | - } | |
28 | - | |
29 | - hideModal() { | |
30 | - this.setState({show: false}); | |
31 | - } | |
32 | - onUpdate(key, value) { | |
33 | - this.setState({[key]: value}); | |
34 | - }; | |
35 | - | |
36 | - render() { | |
37 | - return ( | |
38 | - <ButtonToolbar> | |
39 | - <Button bsStyle="primary" onClick={this.showModal}> | |
40 | - Add Student | |
41 | - </Button> | |
42 | - <Modal | |
43 | - {...this.props} | |
44 | - show={this.state.show} | |
45 | - onHide={this.hideModal} | |
46 | - dialogClassName="custom-modal" | |
47 | - > | |
48 | - <Modal.Header closeButton> | |
49 | - <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title> | |
50 | - </Modal.Header> | |
51 | - <Modal.Body> | |
52 | - <AddStudentFormContainer /> | |
53 | - </Modal.Body> | |
54 | - {/* | |
55 | - <Modal.Footer> | |
56 | - <Button onClick={this.hideModal}>Close</Button> | |
57 | - </Modal.Footer> | |
58 | - */} | |
59 | - </Modal> | |
60 | - </ButtonToolbar> | |
61 | - ); | |
62 | - }; | |
63 | - | |
64 | -}; |
imports/client/views/org/admin/students/addStudentForm.js
... | ... | @@ -1,500 +0,0 @@ |
1 | -import _ from 'lodash'; | |
2 | -import { Meteor } from 'meteor/meteor'; | |
3 | - | |
4 | -import React, { Component } from 'react'; | |
5 | -import { Link,browserHistory } from 'react-router'; | |
6 | -import { Form, FormGroup,InputGroup, | |
7 | - DropdownButton,MenuItem,ControlLabel, | |
8 | - SplitButton, | |
9 | - FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
10 | -import DatePicker from 'react-bootstrap-date-picker' | |
11 | -import {addStudentManually} from '/imports/collections/students/methods'; | |
12 | - | |
13 | -export class AddStudentForm extends Component { | |
14 | - | |
15 | - constructor(props) { | |
16 | - super(props); | |
17 | - this.state = { | |
18 | - admissionId: "123", | |
19 | - firstName: "first", | |
20 | - lastName: "last", | |
21 | - middleName: "middle", | |
22 | - email: "deepak125.dk+21@gmail.com", | |
23 | - dob: "", | |
24 | - formattedDob: "", | |
25 | - gender: "male", | |
26 | - rollNo: "1", | |
27 | - class: "2", | |
28 | - section: "B", | |
29 | - community: "SC", | |
30 | - bloodGroup: "B+", | |
31 | - phone: "9876543321", | |
32 | - address: "address", | |
33 | - city: "chennai", | |
34 | - state: "tn", | |
35 | - parentName: "parentName", | |
36 | - parentEmail: "deepak125.dk+41@gmail.com", | |
37 | - relation: "father", | |
38 | - profession: "farmer", | |
39 | - parentGender: "male", | |
40 | - parentPhone: "987655412", | |
41 | - parentAddress: "parentAddress", | |
42 | - parentCity: "parentCity", | |
43 | - parentState: "parentState", | |
44 | - parentZipcode: "parentZipcode", | |
45 | - }; | |
46 | - this.onUpdate = this.onUpdate.bind(this); | |
47 | - this.handleDob = this.handleDob.bind(this); | |
48 | - }; | |
49 | - | |
50 | - onUpdate(key, value) { | |
51 | - this.setState({[key]: value}); | |
52 | - }; | |
53 | - | |
54 | - handleDob(value, formattedValue) { | |
55 | - this.setState({ | |
56 | - dob: value, // ISO String, ex: "2016-11-19T12:00:00.000Z" | |
57 | - formattedDob: formattedValue // Formatted String, ex: "11/19/2016" | |
58 | - }); | |
59 | -} | |
60 | - addStudent(e){ | |
61 | - e.preventDefault(); | |
62 | - e.persist(); | |
63 | - const firstName = this.state.firstName; | |
64 | - const middleName = this.state.middleName; | |
65 | - const lastName = this.state.lastName; | |
66 | - const admissionId = this.state.admissionId; | |
67 | - const email = this.state.email; | |
68 | - const dob = this.state.dob; | |
69 | - const formattedDob = this.state.formattedDob; | |
70 | - const gender = this.state.gender; | |
71 | - const rollNo = this.state.rollNo; | |
72 | - const studentclass = this.state.class; | |
73 | - const section = this.state.section; | |
74 | - const community = this.state.community; | |
75 | - const bloodGroup = this.state.bloodGroup; | |
76 | - const phone = this.state.phone; | |
77 | - const address = this.state.address; | |
78 | - const city = this.state.city; | |
79 | - const state = this.state.state; | |
80 | - const parentName = this.state.parentName; | |
81 | - const parentEmail = this.state.parentEmail; | |
82 | - const relation = this.state.relation; | |
83 | - const profession = this.state.profession; | |
84 | - const parentGender = this.state.parentGender; | |
85 | - const parentPhone = this.state.parentPhone; | |
86 | - const parentAddress = this.state.parentAddress; | |
87 | - const parentCity = this.state.parentCity; | |
88 | - const parentState = this.state.parentState; | |
89 | - const parentZipcode = this.state.parentZipcode; | |
90 | - if(admissionId==""){ | |
91 | - Bert.alert('Enter Admission Id!', 'danger'); | |
92 | - }else if(firstName==""){ | |
93 | - Bert.alert('Enter Fist Name', 'danger'); | |
94 | - } else if(middleName==""){ | |
95 | - Bert.alert('Enter Middle name!', 'danger'); | |
96 | - }else if(lastName==""){ | |
97 | - Bert.alert('Enter Last name!', 'danger'); | |
98 | - }else if(email==""){ | |
99 | - Bert.alert('Enter email!', 'danger'); | |
100 | - }else if(dob==""){ | |
101 | - Bert.alert('Enter DOB!', 'danger'); | |
102 | - }else if(gender==""){ | |
103 | - Bert.alert('Enter Student Gender!', 'danger'); | |
104 | - }else if(studentclass==""){ | |
105 | - Bert.alert('Enter Class!', 'danger'); | |
106 | - }else if(section==""){ | |
107 | - Bert.alert('Enter Section!', 'danger'); | |
108 | - }else if(community==""){ | |
109 | - Bert.alert('Enter Section!', 'danger'); | |
110 | - }else if(bloodGroup==""){ | |
111 | - Bert.alert('Enter Blood Group!', 'danger'); | |
112 | - }else if(phone==""){ | |
113 | - Bert.alert('Enter phone!', 'danger'); | |
114 | - }else if(address==""){ | |
115 | - Bert.alert('Enter address!', 'danger'); | |
116 | - }else if(city==""){ | |
117 | - Bert.alert('Enter city!', 'danger'); | |
118 | - }else if(state==""){ | |
119 | - Bert.alert('Enter state!', 'danger'); | |
120 | - }else if(parentName==""){ | |
121 | - Bert.alert('Enter Parent name!', 'danger'); | |
122 | - }else if(parentEmail==""){ | |
123 | - Bert.alert('Enter Parent Email!', 'danger'); | |
124 | - }else if(relation==""){ | |
125 | - Bert.alert('Enter relation!', 'danger'); | |
126 | - }else if(profession==""){ | |
127 | - Bert.alert('Enter parent profession!', 'danger'); | |
128 | - }else if(parentGender==""){ | |
129 | - Bert.alert("Enter Parent's Gender!", 'danger'); | |
130 | - }else if(parentPhone==""){ | |
131 | - Bert.alert("Enter Parent's Phone!", 'danger'); | |
132 | - }else if(parentAddress==""){ | |
133 | - Bert.alert("Enter Parent's Address!", 'danger'); | |
134 | - }else if(parentCity==""){ | |
135 | - Bert.alert("Enter Parent's City!", 'danger'); | |
136 | - }else if(parentState==""){ | |
137 | - Bert.alert("Enter Parent's State!", 'danger'); | |
138 | - }else if(parentZipcode==""){ | |
139 | - Bert.alert("Enter Parent's zipcode!", 'danger'); | |
140 | - }else{ | |
141 | - addStudentManually.call({ | |
142 | - admissionId, | |
143 | - firstName, | |
144 | - middleName, | |
145 | - lastName, | |
146 | - email, | |
147 | - dob, | |
148 | - formattedDob, | |
149 | - gender, | |
150 | - rollNo, | |
151 | - studentclass, | |
152 | - section, | |
153 | - community, | |
154 | - bloodGroup, | |
155 | - phone, | |
156 | - address, | |
157 | - city, | |
158 | - state, | |
159 | - parentName, | |
160 | - parentEmail, | |
161 | - relation, | |
162 | - profession, | |
163 | - parentGender, | |
164 | - parentPhone, | |
165 | - parentAddress, | |
166 | - parentCity, | |
167 | - parentState, | |
168 | - parentZipcode | |
169 | - }, function (error, result) { | |
170 | - console.log(error); | |
171 | - console.log(result); | |
172 | - }); | |
173 | - } | |
174 | - } | |
175 | - render() { | |
176 | - return ( | |
177 | - <Form className="steps-validation wizard clearfix" onSubmit={ (e) => this.addStudent(e) } inline> | |
178 | - <div className="steps clearfix"> | |
179 | - <ul role="tablist"> | |
180 | - <li role="tab" className="first current" aria-disabled="false" aria-selected="true"> | |
181 | - <a id="steps-uid-4-t-0" href="#steps-uid-4-h-0" aria-controls="steps-uid-4-p-0"> | |
182 | - <span className="current-info audible">current step: </span><span className="number">1</span> Personal data | |
183 | - </a> | |
184 | - </li> | |
185 | - <li role="tab" className="disabled" aria-disabled="true"> | |
186 | - <a id="steps-uid-4-t-1" href="#steps-uid-4-h-1" aria-controls="steps-uid-4-p-1"> | |
187 | - <span className="number">2</span> Your education\n\ | |
188 | - </a> | |
189 | - </li> | |
190 | - <li role="tab" className="disabled" aria-disabled="true"> | |
191 | - <a id="steps-uid-4-t-2" href="#steps-uid-4-h-2" aria-controls="steps-uid-4-p-2"> | |
192 | - <span className="number">3</span> Your experience | |
193 | - </a> | |
194 | - </li> | |
195 | - <li role="tab" className="disabled last" aria-disabled="true"> | |
196 | - <a id="steps-uid-4-t-3" href="#steps-uid-4-h-3" aria-controls="steps-uid-4-p-3"> | |
197 | - <span className="number">4</span> Additional info | |
198 | - </a> | |
199 | - </li> | |
200 | - </ul> | |
201 | - </div> | |
202 | - <div className="content clearfix"> | |
203 | - <h6 id="steps-uid-4-h-0" tabindex="-1" className="title current">Personal data</h6> | |
204 | - <div id="steps-uid-4-p-0" role="tabpanel" aria-labelledby="steps-uid-4-h-0" className="body current"> | |
205 | - <div className="row"> | |
206 | - <div className="col-md-6"> | |
207 | - | |
208 | - <FormGroup controlId="admissionId"> | |
209 | - <ControlLabel>Admission Id</ControlLabel> | |
210 | - <FormControl | |
211 | - type="text" | |
212 | - value={this.state.admissionId} | |
213 | - placeholder="admission Id" | |
214 | - onChange={e=>this.onUpdate('admissionId',e.target.value)} | |
215 | - /> | |
216 | - </FormGroup> | |
217 | - | |
218 | - </div> | |
219 | - | |
220 | - <div className="col-md-6"> | |
221 | - | |
222 | - <FormGroup controlId="firstName"> | |
223 | - <ControlLabel>First Name</ControlLabel> | |
224 | - <FormControl | |
225 | - type="text" | |
226 | - value={this.state.firstName} | |
227 | - placeholder="First Name" | |
228 | - onChange={e=>this.onUpdate('firstName',e.target.value)} | |
229 | - /> | |
230 | - </FormGroup> | |
231 | - | |
232 | - </div> | |
233 | - </div> | |
234 | - </div> | |
235 | - </div> | |
236 | - | |
237 | - | |
238 | - <FormGroup controlId="admissionId"> | |
239 | - <ControlLabel>Admission Id</ControlLabel> | |
240 | - <FormControl | |
241 | - type="text" | |
242 | - value={this.state.admissionId} | |
243 | - placeholder="admission Id" | |
244 | - onChange={e=>this.onUpdate('admissionId',e.target.value)} | |
245 | - /> | |
246 | - </FormGroup> | |
247 | - | |
248 | - <FormGroup controlId="firstName"> | |
249 | - <ControlLabel>First Name</ControlLabel> | |
250 | - <FormControl | |
251 | - type="text" | |
252 | - value={this.state.firstName} | |
253 | - placeholder="First Name" | |
254 | - onChange={e=>this.onUpdate('firstName',e.target.value)} | |
255 | - /> | |
256 | - </FormGroup> | |
257 | - <FormGroup controlId="middleName"> | |
258 | - <ControlLabel>Middle Name</ControlLabel> | |
259 | - <FormControl | |
260 | - type="text" | |
261 | - value={this.state.middleName} | |
262 | - placeholder="Middle Name" | |
263 | - onChange={e=>this.onUpdate('middleName',e.target.value)} | |
264 | - /> | |
265 | - </FormGroup> | |
266 | - | |
267 | - <FormGroup controlId="lastName"> | |
268 | - <ControlLabel>Last Name</ControlLabel> | |
269 | - <FormControl | |
270 | - type="text" | |
271 | - value={this.state.lastName} | |
272 | - placeholder="Last Name" | |
273 | - onChange={e=>this.onUpdate('lastName',e.target.value)} | |
274 | - /> | |
275 | - | |
276 | - </FormGroup> | |
277 | - <FormGroup controlId="email"> | |
278 | - <ControlLabel>Email</ControlLabel> | |
279 | - <FormControl | |
280 | - type="email" | |
281 | - value={this.state.email} | |
282 | - placeholder="Email" | |
283 | - onChange={e=>this.onUpdate('email',e.target.value)} | |
284 | - /> | |
285 | - </FormGroup> | |
286 | - <FormGroup> | |
287 | - <ControlLabel>Date of birth</ControlLabel> | |
288 | - <DatePicker id="dob" | |
289 | - value={this.state.dob} | |
290 | - onChange={this.handleDob} | |
291 | - /> | |
292 | - </FormGroup> | |
293 | - | |
294 | - <FormGroup controlId="formControlsSelect"> | |
295 | - <ControlLabel>Gender</ControlLabel> | |
296 | - <FormControl componentClass="select" | |
297 | - placeholder="select" | |
298 | - value={this.state.gender} | |
299 | - onChange={e=>this.onUpdate('gender',e.target.value)} | |
300 | - > | |
301 | - <option value="male">Male</option> | |
302 | - <option value="female">Female</option> | |
303 | - </FormControl> | |
304 | - </FormGroup> | |
305 | - | |
306 | - <FormGroup controlId="rollNo"> | |
307 | - <ControlLabel>Roll No</ControlLabel> | |
308 | - <FormControl | |
309 | - type="text" | |
310 | - value={this.state.rollNo} | |
311 | - placeholder="Roll No" | |
312 | - onChange={e=>this.onUpdate('rollNo',e.target.value)} | |
313 | - /> | |
314 | - </FormGroup> | |
315 | - <FormGroup controlId="class"> | |
316 | - <ControlLabel>Class</ControlLabel> | |
317 | - <FormControl | |
318 | - type="text" | |
319 | - value={this.state.class} | |
320 | - placeholder="7" | |
321 | - onChange={e=>this.onUpdate('class',e.target.value)} | |
322 | - /> | |
323 | - </FormGroup> | |
324 | - <FormGroup controlId="section"> | |
325 | - <ControlLabel>Section</ControlLabel> | |
326 | - <FormControl | |
327 | - type="text" | |
328 | - value={this.state.section} | |
329 | - placeholder="B" | |
330 | - onChange={e=>this.onUpdate('section',e.target.value)} | |
331 | - /> | |
332 | - </FormGroup> | |
333 | - | |
334 | - <FormGroup controlId="community"> | |
335 | - <ControlLabel>Community</ControlLabel> | |
336 | - <FormControl | |
337 | - type="text" | |
338 | - value={this.state.community} | |
339 | - placeholder="General" | |
340 | - onChange={e=>this.onUpdate('community',e.target.value)} | |
341 | - /> | |
342 | - </FormGroup> | |
343 | - | |
344 | - <FormGroup controlId="bloodGroup"> | |
345 | - <ControlLabel>bloodGroup</ControlLabel> | |
346 | - <FormControl | |
347 | - type="text" | |
348 | - value={this.state.bloodGroup} | |
349 | - placeholder="B+" | |
350 | - onChange={e=>this.onUpdate('bloodGroup',e.target.value)} | |
351 | - /> | |
352 | - </FormGroup> | |
353 | - | |
354 | - <FormGroup controlId="phone"> | |
355 | - <ControlLabel>Phone</ControlLabel> | |
356 | - <FormControl | |
357 | - type="text" | |
358 | - value={this.state.phone} | |
359 | - placeholder="9999999999" | |
360 | - onChange={e=>this.onUpdate('phone',e.target.value)} | |
361 | - /> | |
362 | - </FormGroup> | |
363 | - | |
364 | - <FormGroup controlId="address"> | |
365 | - <ControlLabel>Address</ControlLabel> | |
366 | - <FormControl | |
367 | - type="text" | |
368 | - value={this.state.address} | |
369 | - placeholder="#876, Street, town" | |
370 | - onChange={e=>this.onUpdate('address',e.target.value)} | |
371 | - /> | |
372 | - </FormGroup> | |
373 | - | |
374 | - <FormGroup controlId="city"> | |
375 | - <ControlLabel>City</ControlLabel> | |
376 | - <FormControl | |
377 | - type="text" | |
378 | - value={this.state.city} | |
379 | - placeholder="Chennai" | |
380 | - onChange={e=>this.onUpdate('city',e.target.value)} | |
381 | - /> | |
382 | - </FormGroup> | |
383 | - | |
384 | - <FormGroup controlId="state"> | |
385 | - <ControlLabel>State</ControlLabel> | |
386 | - <FormControl | |
387 | - type="text" | |
388 | - value={this.state.state} | |
389 | - placeholder="Tamilnadu" | |
390 | - onChange={e=>this.onUpdate('state',e.target.value)} | |
391 | - /> | |
392 | - </FormGroup> | |
393 | - | |
394 | - <FormGroup controlId="parentName"> | |
395 | - <ControlLabel>Parent Name</ControlLabel> | |
396 | - <FormControl | |
397 | - type="text" | |
398 | - value={this.state.parentName} | |
399 | - placeholder="John" | |
400 | - onChange={e=>this.onUpdate('parentName',e.target.value)} | |
401 | - /> | |
402 | - </FormGroup> | |
403 | - | |
404 | - <FormGroup controlId="parentEmail"> | |
405 | - <ControlLabel>Parent Email</ControlLabel> | |
406 | - <FormControl | |
407 | - type="text" | |
408 | - value={this.state.parentEmail} | |
409 | - placeholder="john@email.com" | |
410 | - onChange={e=>this.onUpdate('parentEmail',e.target.value)} | |
411 | - /> | |
412 | - </FormGroup> | |
413 | - | |
414 | - <FormGroup controlId="relation"> | |
415 | - <ControlLabel>Relation</ControlLabel> | |
416 | - <FormControl | |
417 | - type="text" | |
418 | - value={this.state.relation} | |
419 | - placeholder="Father" | |
420 | - onChange={e=>this.onUpdate('relation',e.target.value)} | |
421 | - /> | |
422 | - </FormGroup> | |
423 | - | |
424 | - <FormGroup controlId="profession"> | |
425 | - <ControlLabel>Profession</ControlLabel> | |
426 | - <FormControl | |
427 | - type="text" | |
428 | - value={this.state.profession} | |
429 | - placeholder="Farmer" | |
430 | - onChange={e=>this.onUpdate('profession',e.target.value)} | |
431 | - /> | |
432 | - </FormGroup> | |
433 | - | |
434 | - <FormGroup controlId="parentGender"> | |
435 | - <ControlLabel>Parent Gender</ControlLabel> | |
436 | - <FormControl componentClass="select" | |
437 | - placeholder="select" | |
438 | - value={this.state.parentGender} | |
439 | - onChange={e=>this.onUpdate('parentGender',e.target.value)} | |
440 | - > | |
441 | - <option value="male">Male</option> | |
442 | - <option value="female">Female</option> | |
443 | - </FormControl> | |
444 | - </FormGroup> | |
445 | - | |
446 | - <FormGroup controlId="parentPhone"> | |
447 | - <ControlLabel>Parent Phone</ControlLabel> | |
448 | - <FormControl | |
449 | - type="text" | |
450 | - value={this.state.parentPhone} | |
451 | - placeholder="9876543210" | |
452 | - onChange={e=>this.onUpdate('parentPhone',e.target.value)} | |
453 | - /> | |
454 | - </FormGroup> | |
455 | - | |
456 | - <FormGroup controlId="parentAddress"> | |
457 | - <ControlLabel>Parent Address</ControlLabel> | |
458 | - <FormControl | |
459 | - type="text" | |
460 | - value={this.state.parentAddress} | |
461 | - placeholder="#12, street, town" | |
462 | - onChange={e=>this.onUpdate('parentAddress',e.target.value)} | |
463 | - /> | |
464 | - </FormGroup> | |
465 | - | |
466 | - <FormGroup controlId="parentCity"> | |
467 | - <ControlLabel>Parent City</ControlLabel> | |
468 | - <FormControl | |
469 | - type="text" | |
470 | - value={this.state.parentCity} | |
471 | - placeholder="Chennai" | |
472 | - onChange={e=>this.onUpdate('parentCity',e.target.value)} | |
473 | - /> | |
474 | - </FormGroup> | |
475 | - | |
476 | - <FormGroup controlId="parentState"> | |
477 | - <ControlLabel>Parent State</ControlLabel> | |
478 | - <FormControl | |
479 | - type="text" | |
480 | - value={this.state.parentState} | |
481 | - placeholder="Tamilnadu" | |
482 | - onChange={e=>this.onUpdate('parentState',e.target.value)} | |
483 | - /> | |
484 | - </FormGroup> | |
485 | - | |
486 | - <FormGroup controlId="parentZipcode"> | |
487 | - <ControlLabel>Parent Zipcode</ControlLabel> | |
488 | - <FormControl | |
489 | - type="text" | |
490 | - value={this.state.parentZipcode} | |
491 | - placeholder="600031" | |
492 | - onChange={e=>this.onUpdate('parentZipcode',e.target.value)} | |
493 | - /> | |
494 | - </FormGroup> | |
495 | - <Button type="submit" bsStyle="default">Add Student</Button> | |
496 | - </Form> | |
497 | - ); | |
498 | - }; | |
499 | - | |
500 | -}; |
imports/client/views/org/admin/students/view/StudentTable.js
... | ... | @@ -6,7 +6,6 @@ import { Link,browserHistory } from 'react-router'; |
6 | 6 | import { FormGroup,Panel,Table, |
7 | 7 | ButtonToolbar,Modal, |
8 | 8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; |
9 | - import { AddStudentForm } from '../addStudentForm'; | |
10 | 9 | import {moment} from 'meteor/momentjs:moment' |
11 | 10 | import {StudentRow} from './StudentRow' |
12 | 11 | ... | ... |
imports/client/views/org/admin/teachers/TeacherView.js
... | ... | @@ -8,7 +8,9 @@ import { FormGroup, |
8 | 8 | import { Header } from '../Header'; |
9 | 9 | import { AdminSidebar } from '../Sidebar' |
10 | 10 | import { AdminBreadcrumb } from '../Breadcrumb' |
11 | -import { TeachersTable } from './view/TeachersTable' | |
11 | +import { TeachersTable } from './view/TeachersTable' | |
12 | +import { AddTeacher } from './add/addTeacher' | |
13 | +import { UploadCsvTeacher } from './UploadCsvTeacher' | |
12 | 14 | |
13 | 15 | export class TeachersView extends Component { |
14 | 16 | constructor(props) { |
... | ... | @@ -24,14 +26,14 @@ export class TeachersView extends Component { |
24 | 26 | }; |
25 | 27 | |
26 | 28 | render() { |
27 | - const {user, org} = this.props.data; | |
29 | + const {user, org, teachers, teachersData} = this.props.data; | |
28 | 30 | return ( |
29 | 31 | <div className="appLayout-box"> |
30 | 32 | <div className="page-container"> |
31 | 33 | <div className="page-content"> |
32 | 34 | <AdminSidebar |
33 | - user = {this.props.data.user} | |
34 | - org = {this.props.data.org} | |
35 | + user = {user} | |
36 | + org = {org} | |
35 | 37 | /> |
36 | 38 | {/*end sidebar*/} |
37 | 39 | <div className="content-wrapper"> |
... | ... | @@ -41,17 +43,16 @@ export class TeachersView extends Component { |
41 | 43 | <div className="content has-detached-left"> |
42 | 44 | <div className="container-detached"> |
43 | 45 | <div className="content-detached"> |
44 | - <Header/> | |
45 | - <TeachersTable | |
46 | + <Header | |
47 | + user = {user} | |
48 | + org = {org} | |
49 | + /> | |
50 | + <TeachersTable | |
46 | 51 | data = {this.props.data} |
47 | 52 | teachers = {teachers} |
48 | 53 | /> |
49 | - { | |
50 | - /** | |
51 | - <AddTeacher/> | |
52 | - <UploadCsvTeacher /> | |
53 | - */ | |
54 | - } | |
54 | + <AddTeacher/> | |
55 | + <UploadCsvTeacher /> | |
55 | 56 | </div> |
56 | 57 | </div> |
57 | 58 | <div className="sidebar-detached affix-top"> | ... | ... |
imports/client/views/org/admin/teachers/UploadCsvTeacher.js
... | ... | @@ -0,0 +1,103 @@ |
1 | +// import {UploadCsv } from '/imports/collections/students/UploadCsv' | |
2 | +import _ from 'lodash'; | |
3 | +import { Meteor } from 'meteor/meteor'; | |
4 | + | |
5 | +import React, { Component } from 'react'; | |
6 | +import { Link,browserHistory } from 'react-router'; | |
7 | +import { FormGroup,Panel,Table, | |
8 | + ButtonToolbar,Modal,ControlLabel,HelpBlock, | |
9 | + FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
10 | +// import { AddStudentForm } from './addStudentForm'; | |
11 | +import { FilesCollection } from 'meteor/ostrio:files'; | |
12 | +const Papa = this.Papa; | |
13 | +// console.log(this); | |
14 | +const style = { | |
15 | + margin: 12, | |
16 | +}; | |
17 | +function FieldGroup({ id, label, help, ...props }) { | |
18 | + return ( | |
19 | + <FormGroup controlId={id}> | |
20 | + <ControlLabel>{label}</ControlLabel> | |
21 | + <FormControl {...props} /> | |
22 | + {help && <HelpBlock>{help}</HelpBlock>} | |
23 | + </FormGroup> | |
24 | + ); | |
25 | +} | |
26 | +export class UploadCsvTeacher extends Component { | |
27 | + constructor(props) { | |
28 | + super(props); | |
29 | + this.state = { | |
30 | + show: false | |
31 | + }; | |
32 | + this.showModal = this.showModal.bind(this); | |
33 | + this.hideModal = this.hideModal.bind(this); | |
34 | + this.onUpdate = this.onUpdate.bind(this); | |
35 | + }; | |
36 | + | |
37 | + showModal() { | |
38 | + this.setState({show: true}); | |
39 | + } | |
40 | + | |
41 | + hideModal() { | |
42 | + this.setState({show: false}); | |
43 | + } | |
44 | + onUpdate(key, value) { | |
45 | + this.setState({[key]: value}); | |
46 | + }; | |
47 | + uploadStudentCsv(e){ | |
48 | + e.preventDefault(); | |
49 | + e.persist(); | |
50 | + var file = $('input[type="file"]').prop("files")[0]; | |
51 | + Papa.parse(file, { | |
52 | + header: true, | |
53 | + complete: function(csvData) { | |
54 | + console.log("csvData"); | |
55 | + console.log(csvData); | |
56 | + if(csvData){ | |
57 | + Meteor.call('teachers.uploadCsv', csvData, function (error, result) { | |
58 | + console.log("error"); | |
59 | + console.log(error); | |
60 | + console.log("result"); | |
61 | + console.log(result); | |
62 | + }) | |
63 | + } | |
64 | + } | |
65 | + }); | |
66 | + } | |
67 | + | |
68 | + render() { | |
69 | + console.log(this.props); | |
70 | + return ( | |
71 | + <ButtonToolbar> | |
72 | + <Button bsStyle="primary" onClick={this.showModal}> | |
73 | + Upload CSV | |
74 | + </Button> | |
75 | + <Modal | |
76 | + {...this.props} | |
77 | + show={this.state.show} | |
78 | + onHide={this.hideModal} | |
79 | + dialogClassName="custom-modal" | |
80 | + > | |
81 | + <Modal.Header closeButton> | |
82 | + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title> | |
83 | + </Modal.Header> | |
84 | + <Modal.Body> | |
85 | + <form onSubmit={ (e) => this.uploadStudentCsv(e) } > | |
86 | + <FieldGroup | |
87 | + id="formControlsFile" | |
88 | + type="file" | |
89 | + label="File" | |
90 | + help="Upload you CSV here." | |
91 | + /> | |
92 | + <Button type="submit" bsStyle="default">Upload File</Button> | |
93 | + </form> | |
94 | + </Modal.Body> | |
95 | + <Modal.Footer> | |
96 | + <Button onClick={this.hideModal}>Close</Button> | |
97 | + </Modal.Footer> | |
98 | + </Modal> | |
99 | + </ButtonToolbar> | |
100 | + ); | |
101 | + }; | |
102 | + | |
103 | +}; | ... | ... |
imports/client/views/org/admin/teachers/add/AddStudentFormContainer.js
... | ... | @@ -0,0 +1,96 @@ |
1 | +import React, { Component } from 'react' | |
2 | +import { AddStudentForm } from './addStudentForm' | |
3 | +import StudentForm from './StudentForm' | |
4 | +import Form from '/imports/client/views/core/Form' | |
5 | +import Validator from '/imports/client/views/core/Validator' | |
6 | +import { isRequired, isValidEmail } from '/imports/client/views/core/validations' | |
7 | +import { addStudentManually } from '/imports/collections/students/methods'; | |
8 | + | |
9 | +export class AddStudentFormContainer extends Component { | |
10 | + | |
11 | + constructor(props) { | |
12 | + super(props) | |
13 | + this.state = { currentStep: 0 } | |
14 | + this.handleNextClick = this.handleNextClick.bind(this) | |
15 | + this.handleBackClick = this.handleBackClick.bind(this) | |
16 | + this.handleSubmit = this.handleSubmit.bind(this) | |
17 | + } | |
18 | + | |
19 | + handleNextClick() { | |
20 | + this.form.handleSubmit() | |
21 | + if (this.validator.getErrors() && Object.keys(this.validator.getErrors()).length > 0) return | |
22 | + this.setState({ currentStep: this.state.currentStep + 1 }) | |
23 | + this.form.resetSubmitted() | |
24 | + } | |
25 | + | |
26 | + handleBackClick() { | |
27 | + this.setState({ currentStep: this.state.currentStep + -1 }) | |
28 | + } | |
29 | + | |
30 | + handleSubmit() { | |
31 | + if (this.state.currentStep === 3) { | |
32 | + addStudentManually.call(this.form.state.values) | |
33 | + } | |
34 | + } | |
35 | + | |
36 | + //render callback | |
37 | + render() { | |
38 | + return ( | |
39 | + <Form | |
40 | + onSubmit={this.handleSubmit} | |
41 | + ref={form => this.form = form} | |
42 | + initialValues={{ | |
43 | + gender: 'male', | |
44 | + parentGender: 'male', | |
45 | + }} | |
46 | + > | |
47 | + {({ values, setValue, getValue, isSubmitted, isDirty }) => ( | |
48 | + <Validator | |
49 | + values={values} | |
50 | + ref={validator => this.validator = validator} | |
51 | + validations={{ | |
52 | + admissionId: [(value) => isRequired('Admission id', value)], | |
53 | + firstName: [(value) => isRequired('First name', value)], | |
54 | + lastName: [(value) => isRequired('Last name', value)], | |
55 | + email: [(value) => isRequired('Email', value), isValidEmail], | |
56 | + dob: [(value) => isRequired('Date of birth', value)], | |
57 | + gender: [(value) => isRequired('Gender', value)], | |
58 | + rollNo: [(value) => this.state.currentStep === 1 && isRequired('Roll no', value)], | |
59 | + studentClass: [(value) => this.state.currentStep === 1 && isRequired('Class', value)], | |
60 | + section: [(value) => this.state.currentStep === 1 && isRequired('Section', value)], | |
61 | + community: [(value) => this.state.currentStep === 1 && isRequired('Community', value)], | |
62 | + bloodGroup: [(value) => this.state.currentStep === 1 && isRequired('Blood group', value)], | |
63 | + phone: [(value) => this.state.currentStep === 1 && isRequired('Phone', value)], | |
64 | + address: [(value) => this.state.currentStep === 2 && isRequired('Address', value)], | |
65 | + city: [(value) => this.state.currentStep === 2 && isRequired('City', value)], | |
66 | + state: [(value) => this.state.currentStep === 2 && isRequired('State', value)], | |
67 | + parentName: [(value) => this.state.currentStep === 3 && isRequired('Parent name', value)], | |
68 | + parentEmail: [(value) => this.state.currentStep === 3 && isRequired('Parent email', value), (value) => this.state.currentStep === 3 && isValidEmail(value)], | |
69 | + relation: [(value) => this.state.currentStep === 3 && isRequired('Relation', value)], | |
70 | + profession: [(value) => this.state.currentStep === 3 && isRequired('Profession', value)], | |
71 | + parentGender: [(value) => this.state.currentStep === 3 && isRequired('Parent gender', value)], | |
72 | + parentPhone: [(value) => this.state.currentStep === 3 && isRequired('Parent phone', value)], | |
73 | + parentAddress: [(value) => this.state.currentStep === 3 && isRequired('Parent address', value)], | |
74 | + parentCity: [(value) => this.state.currentStep === 3 && isRequired('Parent city', value)], | |
75 | + parentState: [(value) => this.state.currentStep === 3 && isRequired('Parent state', value)], | |
76 | + parentZipcode: [(value) => this.state.currentStep === 3 && isRequired('Parent zip code', value)], | |
77 | + }} | |
78 | + > | |
79 | + {({ errors }) => ( | |
80 | + <StudentForm | |
81 | + isDirty={isDirty} | |
82 | + setValue={setValue} | |
83 | + getValue={getValue} | |
84 | + isSubmitted={isSubmitted} | |
85 | + errors={errors} | |
86 | + onNextClick={this.handleNextClick} | |
87 | + onBackClick={this.handleBackClick} | |
88 | + currentStep={this.state.currentStep} | |
89 | + /> | |
90 | + )} | |
91 | + </Validator> | |
92 | + )} | |
93 | + </Form> | |
94 | + ) | |
95 | + } | |
96 | +} | ... | ... |
imports/client/views/org/admin/teachers/add/StudentForm.js
... | ... | @@ -0,0 +1,485 @@ |
1 | +import React, { PropTypes } from 'react' | |
2 | +import { | |
3 | + Row, | |
4 | + Col, | |
5 | + FormGroup, | |
6 | + FormControl, | |
7 | + Button | |
8 | +} from 'react-bootstrap' | |
9 | +import DatePicker from '/imports/client/views/core/DatePicker' | |
10 | +import Label from '/imports/client/views/core/Label' | |
11 | +import Stepper from '/imports/client/views/core/Stepper' | |
12 | +import ErrorLabel from '/imports/client/views/core/ErrorLabel' | |
13 | + | |
14 | +const StudentForm = props => ( | |
15 | + <div className="stepy-validation"> | |
16 | + <Stepper | |
17 | + steps={[ | |
18 | + { | |
19 | + label: 'Personal data', | |
20 | + active: props.currentStep === 0, | |
21 | + }, | |
22 | + { | |
23 | + label: 'Academic', | |
24 | + active: props.currentStep === 1, | |
25 | + }, | |
26 | + { | |
27 | + label: 'Address', | |
28 | + active: props.currentStep === 2, | |
29 | + }, | |
30 | + { | |
31 | + label: 'Parent info', | |
32 | + active: props.currentStep === 3, | |
33 | + } | |
34 | + ]} | |
35 | + /> | |
36 | + {props.currentStep === 0 && ( | |
37 | + <fieldset title="1"> | |
38 | + <legend className="text-semibold">Personal data</legend> | |
39 | + <Row> | |
40 | + <Col xs={12} sm={6}> | |
41 | + <FormGroup controlId="admissionId"> | |
42 | + <Label required>Admission Id</Label> | |
43 | + <FormControl | |
44 | + type="text" | |
45 | + value={props.getValue('admissionId')} | |
46 | + placeholder="admission Id" | |
47 | + onChange={e => props.setValue('admissionId', e.target.value)} | |
48 | + /> | |
49 | + {props.isSubmitted() && props.errors && props.errors.admissionId && ( | |
50 | + <ErrorLabel> {props.errors.admissionId} </ErrorLabel> | |
51 | + )} | |
52 | + </FormGroup> | |
53 | + </Col> | |
54 | + <Col xs={12} sm={6}> | |
55 | + <FormGroup controlId="firstName"> | |
56 | + <Label required>First Name</Label> | |
57 | + <FormControl | |
58 | + type="text" | |
59 | + value={props.getValue('firstName')} | |
60 | + placeholder="First Name" | |
61 | + onChange={e => props.setValue('firstName', e.target.value)} | |
62 | + /> | |
63 | + {props.isSubmitted() && props.errors && props.errors.firstName && ( | |
64 | + <ErrorLabel> {props.errors.firstName} </ErrorLabel> | |
65 | + )} | |
66 | + </FormGroup> | |
67 | + </Col> | |
68 | + </Row> | |
69 | + <Row> | |
70 | + <Col xs={12} sm={6}> | |
71 | + <FormGroup controlId="lastName"> | |
72 | + <Label required>Last Name</Label> | |
73 | + <FormControl | |
74 | + type="text" | |
75 | + value={props.getValue('lastName')} | |
76 | + placeholder="Last Name" | |
77 | + onChange={e => props.setValue('lastName', e.target.value)} | |
78 | + /> | |
79 | + {props.isSubmitted() && props.errors && props.errors.lastName && ( | |
80 | + <ErrorLabel> {props.errors.lastName} </ErrorLabel> | |
81 | + )} | |
82 | + </FormGroup> | |
83 | + </Col> | |
84 | + <Col xs={12} sm={6}> | |
85 | + <FormGroup controlId="formControlsSelect"> | |
86 | + <Label>Gender</Label> | |
87 | + <FormControl componentClass="select" | |
88 | + placeholder="select" | |
89 | + value={props.getValue('gender')} | |
90 | + onChange={e => props.setValue('gender', e.target.value)} | |
91 | + > | |
92 | + <option value="male">Male</option> | |
93 | + <option value="female">Female</option> | |
94 | + </FormControl> | |
95 | + {props.isSubmitted() && props.errors && props.errors.gender && ( | |
96 | + <ErrorLabel> {props.errors.gender} </ErrorLabel> | |
97 | + )} | |
98 | + </FormGroup> | |
99 | + </Col> | |
100 | + </Row> | |
101 | + <Row> | |
102 | + <Col xs={12} sm={6}> | |
103 | + <FormGroup controlId="email"> | |
104 | + <Label required>Email</Label> | |
105 | + <FormControl | |
106 | + type="email" | |
107 | + value={props.getValue('email')} | |
108 | + placeholder="Email" | |
109 | + onChange={e => props.setValue('email', e.target.value)} | |
110 | + /> | |
111 | + {props.isSubmitted() && props.errors && props.errors.email && ( | |
112 | + <ErrorLabel> {props.errors.email} </ErrorLabel> | |
113 | + )} | |
114 | + </FormGroup> | |
115 | + </Col> | |
116 | + <Col xs={12} sm={6}> | |
117 | + <FormGroup> | |
118 | + <Label required>Date of birth</Label> | |
119 | + <DatePicker | |
120 | + id="dob" | |
121 | + setValue = {props.setValue} | |
122 | + value={props.getValue('dob')} | |
123 | + onChange={(e) => { | |
124 | + props.setValue('dob', e.target.value) | |
125 | + }} | |
126 | + /> | |
127 | + {props.isSubmitted() && props.errors && props.errors.dob && ( | |
128 | + <ErrorLabel> {props.errors.dob} </ErrorLabel> | |
129 | + )} | |
130 | + </FormGroup> | |
131 | + </Col> | |
132 | + </Row> | |
133 | + <Row> | |
134 | + | |
135 | + </Row> | |
136 | + </fieldset> | |
137 | + )} | |
138 | + {props.currentStep === 1 && ( | |
139 | + <fieldset title="Academic"> | |
140 | + <legend className="text-semibold">Academic</legend> | |
141 | + <Row> | |
142 | + <Col xs={12} sm={6}> | |
143 | + <FormGroup controlId="rollNo"> | |
144 | + <Label required>Roll No</Label> | |
145 | + <FormControl | |
146 | + type="text" | |
147 | + value={props.getValue('rollNo')} | |
148 | + placeholder="Roll No" | |
149 | + onChange={e => props.setValue('rollNo', e.target.value)} | |
150 | + /> | |
151 | + {props.isSubmitted() && props.errors && props.errors.rollNo && ( | |
152 | + <ErrorLabel> {props.errors.rollNo} </ErrorLabel> | |
153 | + )} | |
154 | + </FormGroup> | |
155 | + </Col> | |
156 | + <Col xs={12} sm={6}> | |
157 | + <FormGroup controlId="class"> | |
158 | + <Label required>Class</Label> | |
159 | + <FormControl | |
160 | + type="text" | |
161 | + value={props.getValue('studentClass')} | |
162 | + placeholder="7" | |
163 | + onChange={e => props.setValue('studentClass', e.target.value)} | |
164 | + /> | |
165 | + {props.isSubmitted() && props.errors && props.errors.studentClass && ( | |
166 | + <ErrorLabel> {props.errors.studentClass} </ErrorLabel> | |
167 | + )} | |
168 | + </FormGroup> | |
169 | + </Col> | |
170 | + </Row> | |
171 | + <Row> | |
172 | + <Col xs={12} sm={6}> | |
173 | + <FormGroup controlId="section"> | |
174 | + <Label required>Section</Label> | |
175 | + <FormControl | |
176 | + type="text" | |
177 | + value={props.getValue('section')} | |
178 | + placeholder="B" | |
179 | + onChange={e => props.setValue('section', e.target.value)} | |
180 | + /> | |
181 | + {props.isSubmitted() && props.errors && props.errors.section && ( | |
182 | + <ErrorLabel> {props.errors.section} </ErrorLabel> | |
183 | + )} | |
184 | + </FormGroup> | |
185 | + </Col> | |
186 | + <Col xs={12} sm={6}> | |
187 | + <FormGroup controlId="community"> | |
188 | + <Label required>Community</Label> | |
189 | + <FormControl | |
190 | + type="text" | |
191 | + value={props.getValue('community')} | |
192 | + placeholder="General" | |
193 | + onChange={e => props.setValue('community', e.target.value)} | |
194 | + /> | |
195 | + {props.isSubmitted() && props.errors && props.errors.community && ( | |
196 | + <ErrorLabel> {props.errors.community} </ErrorLabel> | |
197 | + )} | |
198 | + </FormGroup> | |
199 | + </Col> | |
200 | + </Row> | |
201 | + <Row> | |
202 | + <Col xs={12} sm={6}> | |
203 | + <FormGroup controlId="bloodGroup"> | |
204 | + <Label required>bloodGroup</Label> | |
205 | + <FormControl | |
206 | + type="text" | |
207 | + value={props.getValue('bloodGroup')} | |
208 | + placeholder="B+" | |
209 | + onChange={e => props.setValue('bloodGroup', e.target.value)} | |
210 | + /> | |
211 | + {props.isSubmitted() && props.errors && props.errors.bloodGroup && ( | |
212 | + <ErrorLabel> {props.errors.bloodGroup} </ErrorLabel> | |
213 | + )} | |
214 | + </FormGroup> | |
215 | + </Col> | |
216 | + <Col xs={12} sm={6}> | |
217 | + <FormGroup controlId="phone"> | |
218 | + <Label required>Phone</Label> | |
219 | + <FormControl | |
220 | + type="text" | |
221 | + value={props.getValue('phone')} | |
222 | + placeholder="9999999999" | |
223 | + onChange={e => props.setValue('phone', e.target.value)} | |
224 | + /> | |
225 | + {props.isSubmitted() && props.errors && props.errors.phone && ( | |
226 | + <ErrorLabel> {props.errors.phone} </ErrorLabel> | |
227 | + )} | |
228 | + </FormGroup> | |
229 | + </Col> | |
230 | + </Row> | |
231 | + </fieldset> | |
232 | + )} | |
233 | + {props.currentStep === 2 && ( | |
234 | + <fieldset title="Address"> | |
235 | + <legend className="text-semibold">Address</legend> | |
236 | + <Row> | |
237 | + <Col xs={12} sm={6}> | |
238 | + <FormGroup controlId="address"> | |
239 | + <Label required>Address</Label> | |
240 | + <FormControl | |
241 | + type="text" | |
242 | + value={props.getValue('address')} | |
243 | + placeholder="#876, Street, town" | |
244 | + onChange={e => props.setValue('address', e.target.value)} | |
245 | + /> | |
246 | + {props.isSubmitted() && props.errors && props.errors.address && ( | |
247 | + <ErrorLabel> {props.errors.address} </ErrorLabel> | |
248 | + )} | |
249 | + </FormGroup> | |
250 | + </Col> | |
251 | + <Col xs={12} sm={6}> | |
252 | + <FormGroup controlId="city"> | |
253 | + <Label required>City</Label> | |
254 | + <FormControl | |
255 | + type="text" | |
256 | + value={props.getValue('city')} | |
257 | + placeholder="Chennai" | |
258 | + onChange={e => props.setValue('city', e.target.value)} | |
259 | + /> | |
260 | + {props.isSubmitted() && props.errors && props.errors.city && ( | |
261 | + <ErrorLabel> {props.errors.city} </ErrorLabel> | |
262 | + )} | |
263 | + </FormGroup> | |
264 | + </Col> | |
265 | + </Row> | |
266 | + <Row> | |
267 | + <Col xs={12} sm={6}> | |
268 | + <FormGroup controlId="state"> | |
269 | + <Label required>State</Label> | |
270 | + <FormControl | |
271 | + type="text" | |
272 | + value={props.getValue('state')} | |
273 | + placeholder="Tamilnadu" | |
274 | + onChange={e => props.setValue('state', e.target.value)} | |
275 | + /> | |
276 | + {props.isSubmitted() && props.errors && props.errors.state && ( | |
277 | + <ErrorLabel> {props.errors.state} </ErrorLabel> | |
278 | + )} | |
279 | + </FormGroup> | |
280 | + </Col> | |
281 | + </Row> | |
282 | + </fieldset> | |
283 | + )} | |
284 | + {props.currentStep === 3 && ( | |
285 | + <fieldset title="2"> | |
286 | + <legend className="text-semibold">Parent information</legend> | |
287 | + <Row> | |
288 | + <Col xs={12} sm={6}> | |
289 | + <FormGroup controlId="parentName"> | |
290 | + <Label required>Parent Name</Label> | |
291 | + <FormControl | |
292 | + type="text" | |
293 | + value={props.getValue('parentName')} | |
294 | + placeholder="John" | |
295 | + onChange={e => props.setValue('parentName', e.target.value)} | |
296 | + /> | |
297 | + {props.isSubmitted() && props.errors && props.errors.parentName && ( | |
298 | + <ErrorLabel> {props.errors.parentName} </ErrorLabel> | |
299 | + )} | |
300 | + </FormGroup> | |
301 | + </Col> | |
302 | + <Col xs={12} sm={6}> | |
303 | + <FormGroup controlId="parentEmail"> | |
304 | + <Label required>Parent Email</Label> | |
305 | + <FormControl | |
306 | + type="text" | |
307 | + value={props.getValue('parentEmail')} | |
308 | + placeholder="john@email.com" | |
309 | + onChange={e => props.setValue('parentEmail', e.target.value)} | |
310 | + /> | |
311 | + {props.isSubmitted() && props.errors && props.errors.parentEmail && ( | |
312 | + <ErrorLabel> {props.errors.parentEmail} </ErrorLabel> | |
313 | + )} | |
314 | + </FormGroup> | |
315 | + </Col> | |
316 | + </Row> | |
317 | + <Row> | |
318 | + <Col xs={12} sm={6}> | |
319 | + <FormGroup controlId="relation"> | |
320 | + <Label required>Relation</Label> | |
321 | + <FormControl | |
322 | + type="text" | |
323 | + value={props.getValue('relation')} | |
324 | + placeholder="Father" | |
325 | + onChange={e => props.setValue('relation', e.target.value)} | |
326 | + /> | |
327 | + {props.isSubmitted() && props.errors && props.errors.relation && ( | |
328 | + <ErrorLabel> {props.errors.relation} </ErrorLabel> | |
329 | + )} | |
330 | + </FormGroup> | |
331 | + </Col> | |
332 | + <Col xs={12} sm={6}> | |
333 | + <FormGroup controlId="profession"> | |
334 | + <Label required>Profession</Label> | |
335 | + <FormControl | |
336 | + type="text" | |
337 | + value={props.getValue('profession')} | |
338 | + placeholder="Farmer" | |
339 | + onChange={e => props.setValue('profession', e.target.value)} | |
340 | + /> | |
341 | + {props.isSubmitted() && props.errors && props.errors.profession && ( | |
342 | + <ErrorLabel> {props.errors.profession} </ErrorLabel> | |
343 | + )} | |
344 | + </FormGroup> | |
345 | + </Col> | |
346 | + </Row> | |
347 | + <Row> | |
348 | + <Col xs={12} sm={6}> | |
349 | + <FormGroup controlId="parentGender"> | |
350 | + <Label>Parent Gender</Label> | |
351 | + <FormControl componentClass="select" | |
352 | + placeholder="select" | |
353 | + value={props.getValue('parentGender')} | |
354 | + onChange={e => props.setValue('parentGender', e.target.value)} | |
355 | + > | |
356 | + <option value="male">Male</option> | |
357 | + <option value="female">Female</option> | |
358 | + </FormControl> | |
359 | + {props.isSubmitted() && props.errors && props.errors.parentGender && ( | |
360 | + <ErrorLabel> {props.errors.parentGender} </ErrorLabel> | |
361 | + )} | |
362 | + </FormGroup> | |
363 | + </Col> | |
364 | + <Col xs={12} sm={6}> | |
365 | + <FormGroup controlId="parentPhone"> | |
366 | + <Label required>Parent Phone</Label> | |
367 | + <FormControl | |
368 | + type="text" | |
369 | + value={props.getValue('parentPhone')} | |
370 | + placeholder="9876543210" | |
371 | + onChange={e => props.setValue('parentPhone', e.target.value)} | |
372 | + /> | |
373 | + {props.isSubmitted() && props.errors && props.errors.parentPhone && ( | |
374 | + <ErrorLabel> {props.errors.parentPhone} </ErrorLabel> | |
375 | + )} | |
376 | + </FormGroup> | |
377 | + </Col> | |
378 | + </Row> | |
379 | + <Row> | |
380 | + <Col xs={12} sm={6}> | |
381 | + <FormGroup controlId="parentAddress"> | |
382 | + <Label required>Parent Address</Label> | |
383 | + <FormControl | |
384 | + type="text" | |
385 | + value={props.getValue('parentAddress')} | |
386 | + placeholder="#12, street, town" | |
387 | + onChange={e => props.setValue('parentAddress', e.target.value)} | |
388 | + /> | |
389 | + {props.isSubmitted() && props.errors && props.errors.parentAddress && ( | |
390 | + <ErrorLabel> {props.errors.parentAddress} </ErrorLabel> | |
391 | + )} | |
392 | + </FormGroup> | |
393 | + </Col> | |
394 | + <Col xs={12} sm={6}> | |
395 | + <FormGroup controlId="parentCity"> | |
396 | + <Label required>Parent City</Label> | |
397 | + <FormControl | |
398 | + type="text" | |
399 | + value={props.getValue('parentCity')} | |
400 | + placeholder="Chennai" | |
401 | + onChange={e => props.setValue('parentCity', e.target.value)} | |
402 | + /> | |
403 | + {props.isSubmitted() && props.errors && props.errors.parentCity && ( | |
404 | + <ErrorLabel> {props.errors.parentCity} </ErrorLabel> | |
405 | + )} | |
406 | + </FormGroup> | |
407 | + </Col> | |
408 | + </Row> | |
409 | + <Row> | |
410 | + <Col xs={12} sm={6}> | |
411 | + <FormGroup controlId="parentState"> | |
412 | + <Label required>Parent State</Label> | |
413 | + <FormControl | |
414 | + type="text" | |
415 | + value={props.getValue('parentState')} | |
416 | + placeholder="600031" | |
417 | + onChange={e => props.setValue('parentState', e.target.value)} | |
418 | + /> | |
419 | + {props.isSubmitted() && props.errors && props.errors.parentState && ( | |
420 | + <ErrorLabel> {props.errors.parentState} </ErrorLabel> | |
421 | + )} | |
422 | + </FormGroup> | |
423 | + </Col> | |
424 | + <Col xs={12} sm={6}> | |
425 | + <FormGroup controlId="parentZipcode"> | |
426 | + <Label required>Parent Zipcode</Label> | |
427 | + <FormControl | |
428 | + type="text" | |
429 | + value={props.getValue('parentZipcode')} | |
430 | + placeholder="600031" | |
431 | + onChange={e => props.setValue('parentZipcode', e.target.value)} | |
432 | + /> | |
433 | + {props.isSubmitted() && props.errors && props.errors.parentZipcode && ( | |
434 | + <ErrorLabel> {props.errors.parentZipcode} </ErrorLabel> | |
435 | + )} | |
436 | + </FormGroup> | |
437 | + </Col> | |
438 | + </Row> | |
439 | + </fieldset> | |
440 | + )} | |
441 | + <div style={{ textAlign: 'left' }}> | |
442 | + {props.currentStep > 0 && ( | |
443 | + <div style={{ display: 'inline-block', marginRight: 10 }}> | |
444 | + <Button onClick={props.onBackClick}> | |
445 | + <i className="icon-arrow-left13 position-left"></i> | |
446 | + BACK | |
447 | + </Button> | |
448 | + | |
449 | + </div> | |
450 | + )} | |
451 | + {props.currentStep < 3 && ( | |
452 | + <div style={{ display: 'inline-block' }}> | |
453 | + <Button | |
454 | + bsStyle="primary" | |
455 | + onClick={props.onNextClick} | |
456 | + > | |
457 | + NEXT | |
458 | + <i className="icon-arrow-right14 position-right" /> | |
459 | + </Button> | |
460 | + </div> | |
461 | + )} | |
462 | + {props.currentStep === 3 && ( | |
463 | + <div style={{ display: 'inline-block' }}> | |
464 | + <Button | |
465 | + bsStyle="primary" | |
466 | + onClick={props.onNextClick} | |
467 | + > | |
468 | + SAVE | |
469 | + <i className="fa fa-check" /> | |
470 | + </Button> | |
471 | + </div> | |
472 | + )} | |
473 | + </div> | |
474 | + </div> | |
475 | +) | |
476 | + | |
477 | +StudentForm.propTypes = { | |
478 | + currentStep: PropTypes.number.isRequired, | |
479 | + onNextClick: PropTypes.func.isRequired, | |
480 | + onBackClick: PropTypes.func.isRequired, | |
481 | + setValue: PropTypes.func.isRequired, | |
482 | + getValue: PropTypes.func.isRequired, | |
483 | +} | |
484 | + | |
485 | +export default StudentForm | ... | ... |
imports/client/views/org/admin/teachers/add/addStudentForm.js
... | ... | @@ -0,0 +1,500 @@ |
1 | +import _ from 'lodash'; | |
2 | +import { Meteor } from 'meteor/meteor'; | |
3 | + | |
4 | +import React, { Component } from 'react'; | |
5 | +import { Link,browserHistory } from 'react-router'; | |
6 | +import { Form, FormGroup,InputGroup, | |
7 | + DropdownButton,MenuItem,ControlLabel, | |
8 | + SplitButton, | |
9 | + FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
10 | +import DatePicker from 'react-bootstrap-date-picker' | |
11 | +import {addStudentManually} from '/imports/collections/students/methods'; | |
12 | + | |
13 | +export class AddStudentForm extends Component { | |
14 | + | |
15 | + constructor(props) { | |
16 | + super(props); | |
17 | + this.state = { | |
18 | + admissionId: "123", | |
19 | + firstName: "first", | |
20 | + lastName: "last", | |
21 | + middleName: "middle", | |
22 | + email: "deepak125.dk+21@gmail.com", | |
23 | + dob: "", | |
24 | + formattedDob: "", | |
25 | + gender: "male", | |
26 | + rollNo: "1", | |
27 | + class: "2", | |
28 | + section: "B", | |
29 | + community: "SC", | |
30 | + bloodGroup: "B+", | |
31 | + phone: "9876543321", | |
32 | + address: "address", | |
33 | + city: "chennai", | |
34 | + state: "tn", | |
35 | + parentName: "parentName", | |
36 | + parentEmail: "deepak125.dk+41@gmail.com", | |
37 | + relation: "father", | |
38 | + profession: "farmer", | |
39 | + parentGender: "male", | |
40 | + parentPhone: "987655412", | |
41 | + parentAddress: "parentAddress", | |
42 | + parentCity: "parentCity", | |
43 | + parentState: "parentState", | |
44 | + parentZipcode: "parentZipcode", | |
45 | + }; | |
46 | + this.onUpdate = this.onUpdate.bind(this); | |
47 | + this.handleDob = this.handleDob.bind(this); | |
48 | + }; | |
49 | + | |
50 | + onUpdate(key, value) { | |
51 | + this.setState({[key]: value}); | |
52 | + }; | |
53 | + | |
54 | + handleDob(value, formattedValue) { | |
55 | + this.setState({ | |
56 | + dob: value, // ISO String, ex: "2016-11-19T12:00:00.000Z" | |
57 | + formattedDob: formattedValue // Formatted String, ex: "11/19/2016" | |
58 | + }); | |
59 | +} | |
60 | + addStudent(e){ | |
61 | + e.preventDefault(); | |
62 | + e.persist(); | |
63 | + const firstName = this.state.firstName; | |
64 | + const middleName = this.state.middleName; | |
65 | + const lastName = this.state.lastName; | |
66 | + const admissionId = this.state.admissionId; | |
67 | + const email = this.state.email; | |
68 | + const dob = this.state.dob; | |
69 | + const formattedDob = this.state.formattedDob; | |
70 | + const gender = this.state.gender; | |
71 | + const rollNo = this.state.rollNo; | |
72 | + const studentclass = this.state.class; | |
73 | + const section = this.state.section; | |
74 | + const community = this.state.community; | |
75 | + const bloodGroup = this.state.bloodGroup; | |
76 | + const phone = this.state.phone; | |
77 | + const address = this.state.address; | |
78 | + const city = this.state.city; | |
79 | + const state = this.state.state; | |
80 | + const parentName = this.state.parentName; | |
81 | + const parentEmail = this.state.parentEmail; | |
82 | + const relation = this.state.relation; | |
83 | + const profession = this.state.profession; | |
84 | + const parentGender = this.state.parentGender; | |
85 | + const parentPhone = this.state.parentPhone; | |
86 | + const parentAddress = this.state.parentAddress; | |
87 | + const parentCity = this.state.parentCity; | |
88 | + const parentState = this.state.parentState; | |
89 | + const parentZipcode = this.state.parentZipcode; | |
90 | + if(admissionId==""){ | |
91 | + Bert.alert('Enter Admission Id!', 'danger'); | |
92 | + }else if(firstName==""){ | |
93 | + Bert.alert('Enter Fist Name', 'danger'); | |
94 | + } else if(middleName==""){ | |
95 | + Bert.alert('Enter Middle name!', 'danger'); | |
96 | + }else if(lastName==""){ | |
97 | + Bert.alert('Enter Last name!', 'danger'); | |
98 | + }else if(email==""){ | |
99 | + Bert.alert('Enter email!', 'danger'); | |
100 | + }else if(dob==""){ | |
101 | + Bert.alert('Enter DOB!', 'danger'); | |
102 | + }else if(gender==""){ | |
103 | + Bert.alert('Enter Student Gender!', 'danger'); | |
104 | + }else if(studentclass==""){ | |
105 | + Bert.alert('Enter Class!', 'danger'); | |
106 | + }else if(section==""){ | |
107 | + Bert.alert('Enter Section!', 'danger'); | |
108 | + }else if(community==""){ | |
109 | + Bert.alert('Enter Section!', 'danger'); | |
110 | + }else if(bloodGroup==""){ | |
111 | + Bert.alert('Enter Blood Group!', 'danger'); | |
112 | + }else if(phone==""){ | |
113 | + Bert.alert('Enter phone!', 'danger'); | |
114 | + }else if(address==""){ | |
115 | + Bert.alert('Enter address!', 'danger'); | |
116 | + }else if(city==""){ | |
117 | + Bert.alert('Enter city!', 'danger'); | |
118 | + }else if(state==""){ | |
119 | + Bert.alert('Enter state!', 'danger'); | |
120 | + }else if(parentName==""){ | |
121 | + Bert.alert('Enter Parent name!', 'danger'); | |
122 | + }else if(parentEmail==""){ | |
123 | + Bert.alert('Enter Parent Email!', 'danger'); | |
124 | + }else if(relation==""){ | |
125 | + Bert.alert('Enter relation!', 'danger'); | |
126 | + }else if(profession==""){ | |
127 | + Bert.alert('Enter parent profession!', 'danger'); | |
128 | + }else if(parentGender==""){ | |
129 | + Bert.alert("Enter Parent's Gender!", 'danger'); | |
130 | + }else if(parentPhone==""){ | |
131 | + Bert.alert("Enter Parent's Phone!", 'danger'); | |
132 | + }else if(parentAddress==""){ | |
133 | + Bert.alert("Enter Parent's Address!", 'danger'); | |
134 | + }else if(parentCity==""){ | |
135 | + Bert.alert("Enter Parent's City!", 'danger'); | |
136 | + }else if(parentState==""){ | |
137 | + Bert.alert("Enter Parent's State!", 'danger'); | |
138 | + }else if(parentZipcode==""){ | |
139 | + Bert.alert("Enter Parent's zipcode!", 'danger'); | |
140 | + }else{ | |
141 | + addStudentManually.call({ | |
142 | + admissionId, | |
143 | + firstName, | |
144 | + middleName, | |
145 | + lastName, | |
146 | + email, | |
147 | + dob, | |
148 | + formattedDob, | |
149 | + gender, | |
150 | + rollNo, | |
151 | + studentclass, | |
152 | + section, | |
153 | + community, | |
154 | + bloodGroup, | |
155 | + phone, | |
156 | + address, | |
157 | + city, | |
158 | + state, | |
159 | + parentName, | |
160 | + parentEmail, | |
161 | + relation, | |
162 | + profession, | |
163 | + parentGender, | |
164 | + parentPhone, | |
165 | + parentAddress, | |
166 | + parentCity, | |
167 | + parentState, | |
168 | + parentZipcode | |
169 | + }, function (error, result) { | |
170 | + console.log(error); | |
171 | + console.log(result); | |
172 | + }); | |
173 | + } | |
174 | + } | |
175 | + render() { | |
176 | + return ( | |
177 | + <Form className="steps-validation wizard clearfix" onSubmit={ (e) => this.addStudent(e) } inline> | |
178 | + <div className="steps clearfix"> | |
179 | + <ul role="tablist"> | |
180 | + <li role="tab" className="first current" aria-disabled="false" aria-selected="true"> | |
181 | + <a id="steps-uid-4-t-0" href="#steps-uid-4-h-0" aria-controls="steps-uid-4-p-0"> | |
182 | + <span className="current-info audible">current step: </span><span className="number">1</span> Personal data | |
183 | + </a> | |
184 | + </li> | |
185 | + <li role="tab" className="disabled" aria-disabled="true"> | |
186 | + <a id="steps-uid-4-t-1" href="#steps-uid-4-h-1" aria-controls="steps-uid-4-p-1"> | |
187 | + <span className="number">2</span> Your education\n\ | |
188 | + </a> | |
189 | + </li> | |
190 | + <li role="tab" className="disabled" aria-disabled="true"> | |
191 | + <a id="steps-uid-4-t-2" href="#steps-uid-4-h-2" aria-controls="steps-uid-4-p-2"> | |
192 | + <span className="number">3</span> Your experience | |
193 | + </a> | |
194 | + </li> | |
195 | + <li role="tab" className="disabled last" aria-disabled="true"> | |
196 | + <a id="steps-uid-4-t-3" href="#steps-uid-4-h-3" aria-controls="steps-uid-4-p-3"> | |
197 | + <span className="number">4</span> Additional info | |
198 | + </a> | |
199 | + </li> | |
200 | + </ul> | |
201 | + </div> | |
202 | + <div className="content clearfix"> | |
203 | + <h6 id="steps-uid-4-h-0" tabindex="-1" className="title current">Personal data</h6> | |
204 | + <div id="steps-uid-4-p-0" role="tabpanel" aria-labelledby="steps-uid-4-h-0" className="body current"> | |
205 | + <div className="row"> | |
206 | + <div className="col-md-6"> | |
207 | + | |
208 | + <FormGroup controlId="admissionId"> | |
209 | + <ControlLabel>Admission Id</ControlLabel> | |
210 | + <FormControl | |
211 | + type="text" | |
212 | + value={this.state.admissionId} | |
213 | + placeholder="admission Id" | |
214 | + onChange={e=>this.onUpdate('admissionId',e.target.value)} | |
215 | + /> | |
216 | + </FormGroup> | |
217 | + | |
218 | + </div> | |
219 | + | |
220 | + <div className="col-md-6"> | |
221 | + | |
222 | + <FormGroup controlId="firstName"> | |
223 | + <ControlLabel>First Name</ControlLabel> | |
224 | + <FormControl | |
225 | + type="text" | |
226 | + value={this.state.firstName} | |
227 | + placeholder="First Name" | |
228 | + onChange={e=>this.onUpdate('firstName',e.target.value)} | |
229 | + /> | |
230 | + </FormGroup> | |
231 | + | |
232 | + </div> | |
233 | + </div> | |
234 | + </div> | |
235 | + </div> | |
236 | + | |
237 | + | |
238 | + <FormGroup controlId="admissionId"> | |
239 | + <ControlLabel>Admission Id</ControlLabel> | |
240 | + <FormControl | |
241 | + type="text" | |
242 | + value={this.state.admissionId} | |
243 | + placeholder="admission Id" | |
244 | + onChange={e=>this.onUpdate('admissionId',e.target.value)} | |
245 | + /> | |
246 | + </FormGroup> | |
247 | + | |
248 | + <FormGroup controlId="firstName"> | |
249 | + <ControlLabel>First Name</ControlLabel> | |
250 | + <FormControl | |
251 | + type="text" | |
252 | + value={this.state.firstName} | |
253 | + placeholder="First Name" | |
254 | + onChange={e=>this.onUpdate('firstName',e.target.value)} | |
255 | + /> | |
256 | + </FormGroup> | |
257 | + <FormGroup controlId="middleName"> | |
258 | + <ControlLabel>Middle Name</ControlLabel> | |
259 | + <FormControl | |
260 | + type="text" | |
261 | + value={this.state.middleName} | |
262 | + placeholder="Middle Name" | |
263 | + onChange={e=>this.onUpdate('middleName',e.target.value)} | |
264 | + /> | |
265 | + </FormGroup> | |
266 | + | |
267 | + <FormGroup controlId="lastName"> | |
268 | + <ControlLabel>Last Name</ControlLabel> | |
269 | + <FormControl | |
270 | + type="text" | |
271 | + value={this.state.lastName} | |
272 | + placeholder="Last Name" | |
273 | + onChange={e=>this.onUpdate('lastName',e.target.value)} | |
274 | + /> | |
275 | + | |
276 | + </FormGroup> | |
277 | + <FormGroup controlId="email"> | |
278 | + <ControlLabel>Email</ControlLabel> | |
279 | + <FormControl | |
280 | + type="email" | |
281 | + value={this.state.email} | |
282 | + placeholder="Email" | |
283 | + onChange={e=>this.onUpdate('email',e.target.value)} | |
284 | + /> | |
285 | + </FormGroup> | |
286 | + <FormGroup> | |
287 | + <ControlLabel>Date of birth</ControlLabel> | |
288 | + <DatePicker id="dob" | |
289 | + value={this.state.dob} | |
290 | + onChange={this.handleDob} | |
291 | + /> | |
292 | + </FormGroup> | |
293 | + | |
294 | + <FormGroup controlId="formControlsSelect"> | |
295 | + <ControlLabel>Gender</ControlLabel> | |
296 | + <FormControl componentClass="select" | |
297 | + placeholder="select" | |
298 | + value={this.state.gender} | |
299 | + onChange={e=>this.onUpdate('gender',e.target.value)} | |
300 | + > | |
301 | + <option value="male">Male</option> | |
302 | + <option value="female">Female</option> | |
303 | + </FormControl> | |
304 | + </FormGroup> | |
305 | + | |
306 | + <FormGroup controlId="rollNo"> | |
307 | + <ControlLabel>Roll No</ControlLabel> | |
308 | + <FormControl | |
309 | + type="text" | |
310 | + value={this.state.rollNo} | |
311 | + placeholder="Roll No" | |
312 | + onChange={e=>this.onUpdate('rollNo',e.target.value)} | |
313 | + /> | |
314 | + </FormGroup> | |
315 | + <FormGroup controlId="class"> | |
316 | + <ControlLabel>Class</ControlLabel> | |
317 | + <FormControl | |
318 | + type="text" | |
319 | + value={this.state.class} | |
320 | + placeholder="7" | |
321 | + onChange={e=>this.onUpdate('class',e.target.value)} | |
322 | + /> | |
323 | + </FormGroup> | |
324 | + <FormGroup controlId="section"> | |
325 | + <ControlLabel>Section</ControlLabel> | |
326 | + <FormControl | |
327 | + type="text" | |
328 | + value={this.state.section} | |
329 | + placeholder="B" | |
330 | + onChange={e=>this.onUpdate('section',e.target.value)} | |
331 | + /> | |
332 | + </FormGroup> | |
333 | + | |
334 | + <FormGroup controlId="community"> | |
335 | + <ControlLabel>Community</ControlLabel> | |
336 | + <FormControl | |
337 | + type="text" | |
338 | + value={this.state.community} | |
339 | + placeholder="General" | |
340 | + onChange={e=>this.onUpdate('community',e.target.value)} | |
341 | + /> | |
342 | + </FormGroup> | |
343 | + | |
344 | + <FormGroup controlId="bloodGroup"> | |
345 | + <ControlLabel>bloodGroup</ControlLabel> | |
346 | + <FormControl | |
347 | + type="text" | |
348 | + value={this.state.bloodGroup} | |
349 | + placeholder="B+" | |
350 | + onChange={e=>this.onUpdate('bloodGroup',e.target.value)} | |
351 | + /> | |
352 | + </FormGroup> | |
353 | + | |
354 | + <FormGroup controlId="phone"> | |
355 | + <ControlLabel>Phone</ControlLabel> | |
356 | + <FormControl | |
357 | + type="text" | |
358 | + value={this.state.phone} | |
359 | + placeholder="9999999999" | |
360 | + onChange={e=>this.onUpdate('phone',e.target.value)} | |
361 | + /> | |
362 | + </FormGroup> | |
363 | + | |
364 | + <FormGroup controlId="address"> | |
365 | + <ControlLabel>Address</ControlLabel> | |
366 | + <FormControl | |
367 | + type="text" | |
368 | + value={this.state.address} | |
369 | + placeholder="#876, Street, town" | |
370 | + onChange={e=>this.onUpdate('address',e.target.value)} | |
371 | + /> | |
372 | + </FormGroup> | |
373 | + | |
374 | + <FormGroup controlId="city"> | |
375 | + <ControlLabel>City</ControlLabel> | |
376 | + <FormControl | |
377 | + type="text" | |
378 | + value={this.state.city} | |
379 | + placeholder="Chennai" | |
380 | + onChange={e=>this.onUpdate('city',e.target.value)} | |
381 | + /> | |
382 | + </FormGroup> | |
383 | + | |
384 | + <FormGroup controlId="state"> | |
385 | + <ControlLabel>State</ControlLabel> | |
386 | + <FormControl | |
387 | + type="text" | |
388 | + value={this.state.state} | |
389 | + placeholder="Tamilnadu" | |
390 | + onChange={e=>this.onUpdate('state',e.target.value)} | |
391 | + /> | |
392 | + </FormGroup> | |
393 | + | |
394 | + <FormGroup controlId="parentName"> | |
395 | + <ControlLabel>Parent Name</ControlLabel> | |
396 | + <FormControl | |
397 | + type="text" | |
398 | + value={this.state.parentName} | |
399 | + placeholder="John" | |
400 | + onChange={e=>this.onUpdate('parentName',e.target.value)} | |
401 | + /> | |
402 | + </FormGroup> | |
403 | + | |
404 | + <FormGroup controlId="parentEmail"> | |
405 | + <ControlLabel>Parent Email</ControlLabel> | |
406 | + <FormControl | |
407 | + type="text" | |
408 | + value={this.state.parentEmail} | |
409 | + placeholder="john@email.com" | |
410 | + onChange={e=>this.onUpdate('parentEmail',e.target.value)} | |
411 | + /> | |
412 | + </FormGroup> | |
413 | + | |
414 | + <FormGroup controlId="relation"> | |
415 | + <ControlLabel>Relation</ControlLabel> | |
416 | + <FormControl | |
417 | + type="text" | |
418 | + value={this.state.relation} | |
419 | + placeholder="Father" | |
420 | + onChange={e=>this.onUpdate('relation',e.target.value)} | |
421 | + /> | |
422 | + </FormGroup> | |
423 | + | |
424 | + <FormGroup controlId="profession"> | |
425 | + <ControlLabel>Profession</ControlLabel> | |
426 | + <FormControl | |
427 | + type="text" | |
428 | + value={this.state.profession} | |
429 | + placeholder="Farmer" | |
430 | + onChange={e=>this.onUpdate('profession',e.target.value)} | |
431 | + /> | |
432 | + </FormGroup> | |
433 | + | |
434 | + <FormGroup controlId="parentGender"> | |
435 | + <ControlLabel>Parent Gender</ControlLabel> | |
436 | + <FormControl componentClass="select" | |
437 | + placeholder="select" | |
438 | + value={this.state.parentGender} | |
439 | + onChange={e=>this.onUpdate('parentGender',e.target.value)} | |
440 | + > | |
441 | + <option value="male">Male</option> | |
442 | + <option value="female">Female</option> | |
443 | + </FormControl> | |
444 | + </FormGroup> | |
445 | + | |
446 | + <FormGroup controlId="parentPhone"> | |
447 | + <ControlLabel>Parent Phone</ControlLabel> | |
448 | + <FormControl | |
449 | + type="text" | |
450 | + value={this.state.parentPhone} | |
451 | + placeholder="9876543210" | |
452 | + onChange={e=>this.onUpdate('parentPhone',e.target.value)} | |
453 | + /> | |
454 | + </FormGroup> | |
455 | + | |
456 | + <FormGroup controlId="parentAddress"> | |
457 | + <ControlLabel>Parent Address</ControlLabel> | |
458 | + <FormControl | |
459 | + type="text" | |
460 | + value={this.state.parentAddress} | |
461 | + placeholder="#12, street, town" | |
462 | + onChange={e=>this.onUpdate('parentAddress',e.target.value)} | |
463 | + /> | |
464 | + </FormGroup> | |
465 | + | |
466 | + <FormGroup controlId="parentCity"> | |
467 | + <ControlLabel>Parent City</ControlLabel> | |
468 | + <FormControl | |
469 | + type="text" | |
470 | + value={this.state.parentCity} | |
471 | + placeholder="Chennai" | |
472 | + onChange={e=>this.onUpdate('parentCity',e.target.value)} | |
473 | + /> | |
474 | + </FormGroup> | |
475 | + | |
476 | + <FormGroup controlId="parentState"> | |
477 | + <ControlLabel>Parent State</ControlLabel> | |
478 | + <FormControl | |
479 | + type="text" | |
480 | + value={this.state.parentState} | |
481 | + placeholder="Tamilnadu" | |
482 | + onChange={e=>this.onUpdate('parentState',e.target.value)} | |
483 | + /> | |
484 | + </FormGroup> | |
485 | + | |
486 | + <FormGroup controlId="parentZipcode"> | |
487 | + <ControlLabel>Parent Zipcode</ControlLabel> | |
488 | + <FormControl | |
489 | + type="text" | |
490 | + value={this.state.parentZipcode} | |
491 | + placeholder="600031" | |
492 | + onChange={e=>this.onUpdate('parentZipcode',e.target.value)} | |
493 | + /> | |
494 | + </FormGroup> | |
495 | + <Button type="submit" bsStyle="default">Add Student</Button> | |
496 | + </Form> | |
497 | + ); | |
498 | + }; | |
499 | + | |
500 | +}; | ... | ... |
imports/client/views/org/admin/teachers/add/addTeacher.js
... | ... | @@ -0,0 +1,63 @@ |
1 | +import _ from 'lodash'; | |
2 | +import { Meteor } from 'meteor/meteor'; | |
3 | +import React, { Component } from 'react'; | |
4 | +import { Link,browserHistory } from 'react-router'; | |
5 | +import { FormGroup,Panel,Table, | |
6 | + ButtonToolbar,Modal, | |
7 | + FormControl,Glyphicon,Button } from 'react-bootstrap'; | |
8 | +import { AddStudentFormContainer } from './AddStudentFormContainer'; | |
9 | + | |
10 | +const style = { | |
11 | + margin: 12, | |
12 | +}; | |
13 | +export class AddTeacher extends Component { | |
14 | + constructor(props) { | |
15 | + super(props); | |
16 | + this.state = { | |
17 | + show: false | |
18 | + }; | |
19 | + this.showModal = this.showModal.bind(this); | |
20 | + this.hideModal = this.hideModal.bind(this); | |
21 | + this.onUpdate = this.onUpdate.bind(this); | |
22 | + }; | |
23 | + | |
24 | + showModal() { | |
25 | + this.setState({show: true}); | |
26 | + } | |
27 | + | |
28 | + hideModal() { | |
29 | + this.setState({show: false}); | |
30 | + } | |
31 | + onUpdate(key, value) { | |
32 | + this.setState({[key]: value}); | |
33 | + }; | |
34 | + | |
35 | + render() { | |
36 | + return ( | |
37 | + <ButtonToolbar> | |
38 | + <Button bsStyle="primary" onClick={this.showModal}> | |
39 | + Add Student | |
40 | + </Button> | |
41 | + <Modal | |
42 | + {...this.props} | |
43 | + show={this.state.show} | |
44 | + onHide={this.hideModal} | |
45 | + dialogClassName="custom-modal" | |
46 | + > | |
47 | + <Modal.Header closeButton> | |
48 | + <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title> | |
49 | + </Modal.Header> | |
50 | + <Modal.Body> | |
51 | + <AddStudentFormContainer /> | |
52 | + </Modal.Body> | |
53 | + {/* | |
54 | + <Modal.Footer> | |
55 | + <Button onClick={this.hideModal}>Close</Button> | |
56 | + </Modal.Footer> | |
57 | + */} | |
58 | + </Modal> | |
59 | + </ButtonToolbar> | |
60 | + ); | |
61 | + }; | |
62 | + | |
63 | +}; | ... | ... |