Commit b02441289faa525d44e328f455bf8e626079d822
1 parent
c6b4fc634c
Exists in
master
added verify module
Showing
8 changed files
with
56 additions
and
17 deletions
Show diff stats
imports/client/views/nonOrg/app/module/AppLayout.js
1 | import _ from 'lodash'; | 1 | import _ from 'lodash'; |
2 | import { Meteor } from 'meteor/meteor'; | 2 | import { Meteor } from 'meteor/meteor'; |
3 | import React, { Component } from 'react'; | 3 | import React, { Component } from 'react'; |
4 | import { Link } from 'react-router'; | 4 | import { Link } from 'react-router'; |
5 | import { Avatar } from '/imports/client/components/Avatar'; | 5 | import { Avatar } from '/imports/client/components/Avatar'; |
6 | import { Icon } from '/imports/client/components/Icon'; | 6 | import { Icon } from '/imports/client/components/Icon'; |
7 | import classNames from 'classnames'; | 7 | import classNames from 'classnames'; |
8 | 8 | ||
9 | import { logout } from '/imports/client/app/utils/loginMethods'; | 9 | import { logout } from '/imports/client/app/utils/loginMethods'; |
10 | import { VerifyModule } from '/imports/client/views/verify/module/index' | ||
10 | 11 | ||
11 | import Signup from '/imports/client/views/nonOrg/enter/SignupView'; | 12 | import Signup from '/imports/client/views/nonOrg/enter/SignupView'; |
12 | import { Collapse, Navbar, NavbarToggler, | 13 | import { Collapse, Navbar, NavbarToggler, |
13 | NavbarBrand, Nav, NavItem, NavLink } from 'reactstrap'; | 14 | NavbarBrand, Nav, NavItem, NavLink } from 'reactstrap'; |
14 | 15 | ||
15 | 16 | ||
16 | export class AppLayout extends Component { | 17 | export class AppLayout extends Component { |
17 | constructor(props) { | 18 | constructor(props) { |
18 | super(props); | 19 | super(props); |
19 | 20 | ||
20 | this.toggle = this.toggle.bind(this); | 21 | this.toggle = this.toggle.bind(this); |
21 | this.state = { | 22 | this.state = { |
22 | isOpen: false | 23 | isOpen: false |
23 | }; | 24 | }; |
24 | } | 25 | } |
25 | toggle() { | 26 | toggle() { |
26 | this.setState({ | 27 | this.setState({ |
27 | isOpen: !this.state.isOpen | 28 | isOpen: !this.state.isOpen |
28 | }); | 29 | }); |
29 | } | 30 | } |
30 | render() { | 31 | render() { |
31 | const {user, org} = this.props.data; | 32 | const {user, org} = this.props.data; |
32 | console.log(user); | 33 | console.log(user); |
33 | console.log(org); | 34 | console.log(org); |
34 | if(!user) { | 35 | if(!user) { |
35 | return ( | 36 | return ( |
36 | <Signup | 37 | <Signup |
37 | /> | 38 | /> |
38 | ); | 39 | ); |
39 | } | 40 | } |
40 | 41 | ||
41 | if(!user.isEmailVerified()) { | 42 | if(!user.isEmailVerified()) { |
42 | return ( | 43 | return ( |
43 | <VerifyModule | 44 | <VerifyModule |
44 | pane = {this.props.location.query.verify} | 45 | pane = {this.props.location.query.verify} |
45 | location = {this.props.location} | 46 | location = {this.props.location} |
46 | /> | 47 | /> |
47 | ); | 48 | ); |
48 | } | 49 | } |
49 | const theUrl = Meteor.absoluteUrl(); | 50 | const theUrl = Meteor.absoluteUrl(); |
50 | OrgUrl = theUrl.replace("http://","http://"+org.slug+"."); | 51 | OrgUrl = theUrl.replace("http://","http://"+org.slug+"."); |
51 | return ( | 52 | return ( |
52 | <div className = "appLayout-box"> | 53 | <div className = "appLayout-box"> |
53 | <Navbar color="faded" light toggleable> | 54 | <Navbar color="faded" light toggleable> |
54 | <NavbarToggler right onClick={this.toggle} /> | 55 | <NavbarToggler right onClick={this.toggle} /> |
55 | <NavbarBrand href="/">reactstrap</NavbarBrand> | 56 | <NavbarBrand href="/">reactstrap</NavbarBrand> |
56 | <Collapse isOpen={this.state.isOpen} navbar> | 57 | <Collapse isOpen={this.state.isOpen} navbar> |
57 | <Nav className="ml-auto" navbar> | 58 | <Nav className="ml-auto" navbar> |
58 | <NavItem> | 59 | <NavItem> |
59 | <NavLink href="/components/">Components</NavLink> | 60 | <NavLink href="/components/">Components</NavLink> |
60 | </NavItem> | 61 | </NavItem> |
61 | <NavItem> | 62 | <NavItem> |
62 | <NavLink href="https://github.com/reactstrap/reactstrap">Github</NavLink> | 63 | <NavLink href="https://github.com/reactstrap/reactstrap">Github</NavLink> |
63 | </NavItem> | 64 | </NavItem> |
64 | </Nav> | 65 | </Nav> |
65 | </Collapse> | 66 | </Collapse> |
66 | </Navbar> | 67 | </Navbar> |
67 | <div className = "appLayout-wrapOuter"> | 68 | <div className = "appLayout-wrapOuter"> |
68 | <div className = "appLayout-wrapInner"> | 69 | <div className = "appLayout-wrapInner"> |
69 | <div className = "appLayout-menuWrap"> | 70 | <div className = "appLayout-menuWrap"> |
70 | </div> | 71 | </div> |
71 | <div className = "appLayout-contentWrap"> | 72 | <div className = "appLayout-contentWrap"> |
72 | <div className = "appLayout-content"> | 73 | <div className = "appLayout-content"> |
73 | Hi, {user.getFullName()}, | 74 | Hi, {user.getFullName()}, |
74 | Please visit your organization page by <a href={OrgUrl}>clicking here </a> and login using your credentials! | 75 | Please visit your organization page by <a href={OrgUrl}>clicking here </a> and login using your credentials! |
75 | </div> | 76 | </div> |
76 | </div> | 77 | </div> |
77 | </div> | 78 | </div> |
78 | </div> | 79 | </div> |
79 | </div> | 80 | </div> |
80 | ); | 81 | ); |
81 | }; | 82 | }; |
82 | 83 | ||
83 | }; | 84 | }; |
84 | 85 |
imports/client/views/nonOrg/enter/SignupView.js
1 | import React from 'react'; | 1 | import React from 'react'; |
2 | import { Link } from 'react-router'; | 2 | import { Link } from 'react-router'; |
3 | import { Row, Col, FormGroup, | 3 | import { Row, Col, FormGroup, |
4 | ControlLabel, FormControl, | 4 | ControlLabel, FormControl, |
5 | InputGroup, Button } from 'react-bootstrap'; | 5 | InputGroup, Button } from 'react-bootstrap'; |
6 | import handleSignup from './signup'; | 6 | import handleSignup from './signup'; |
7 | import { Orgs } from '/imports/collections/orgs/index'; | 7 | import { Orgs } from '/imports/collections/orgs/index'; |
8 | import './signup.css' | ||
8 | 9 | ||
9 | export default class Signup extends React.Component { | 10 | export default class Signup extends React.Component { |
10 | constructor(props) { | 11 | constructor(props) { |
11 | super(props); | 12 | super(props); |
12 | this.state = { | 13 | this.state = { |
13 | orgSlug: "" | 14 | orgSlug: "" |
14 | }; | 15 | }; |
15 | } | 16 | } |
16 | componentWillMount(){ | 17 | componentWillMount(){ |
17 | Meteor.subscribe('allOrgsSlug'); | 18 | Meteor.subscribe('allOrgsSlug'); |
18 | } | 19 | } |
19 | 20 | ||
20 | componentDidMount() { | 21 | componentDidMount() { |
21 | handleSignup({ component: this }); | 22 | handleSignup({ component: this }); |
22 | } | 23 | } |
23 | handleChange(e) { | 24 | handleChange(e) { |
24 | this.setState({ orgSlug: e.target.value }); | 25 | this.setState({ orgSlug: e.target.value }); |
25 | } | 26 | } |
26 | handleSubmit(event) { | 27 | handleSubmit(event) { |
27 | event.preventDefault(); | 28 | event.preventDefault(); |
28 | } | 29 | } |
29 | checkExistingOrgSlug() { | 30 | checkExistingOrgSlug() { |
30 | if(this.state.orgSlug==""){return null} | 31 | if(this.state.orgSlug==""){return null} |
31 | searchOrg = Orgs.find({slug:this.state.orgSlug}).fetch(); | 32 | searchOrg = Orgs.find({slug:this.state.orgSlug}).fetch(); |
32 | if(searchOrg.length>0){ | 33 | if(searchOrg.length>0){ |
33 | return "error" | 34 | return "error" |
34 | }else{ | 35 | }else{ |
35 | return "success" | 36 | return "success" |
36 | } | 37 | } |
37 | } | 38 | } |
38 | render() { | 39 | render() { |
39 | return ( | 40 | return ( |
40 | <div className="Signup"> | 41 | <div className="Signup"> |
41 | <Row> | 42 | <Row> |
42 | <Col xs={ 12 } sm={ 6 } md={ 4 }> | 43 | <Col xs={ 12 } sm={ 6 } md={ 4 }> |
43 | <h4 className="page-header">Sign Up</h4> | 44 | <h4 className="page-header">Sign Up</h4> |
44 | <form | 45 | <form |
45 | ref={ form => (this.signupForm = form) } | 46 | ref={ form => (this.signupForm = form) } |
46 | onSubmit={ this.handleSubmit } | 47 | onSubmit={ this.handleSubmit } |
47 | > | 48 | > |
48 | <Row> | 49 | <Row> |
49 | <Col xs={ 12 } sm={ 12 }> | 50 | <Col xs={ 12 } sm={ 12 }> |
50 | <FormGroup controlId="orgSlugField" validationState={this.checkExistingOrgSlug()}> | 51 | <FormGroup controlId="orgSlugField" validationState={this.checkExistingOrgSlug()}> |
51 | <ControlLabel>Organisation name</ControlLabel> | 52 | <ControlLabel>Organisation name</ControlLabel> |
52 | <InputGroup> | 53 | <InputGroup> |
53 | <FormControl | 54 | <FormControl |
54 | type ="text" | 55 | type ="text" |
55 | ref ="orgSlug" | 56 | ref ="orgSlug" |
56 | name ="orgSlug" | 57 | name ="orgSlug" |
57 | placeholder ="School URL" | 58 | placeholder ="School URL" |
58 | onChange = {(e) => this.handleChange(e)} | 59 | onChange = {(e) => this.handleChange(e)} |
59 | /> | 60 | /> |
60 | <InputGroup.Addon>@yd.com</InputGroup.Addon> | 61 | <InputGroup.Addon>@yd.com</InputGroup.Addon> |
61 | </InputGroup> | 62 | </InputGroup> |
62 | </FormGroup> | 63 | </FormGroup> |
63 | </Col> | 64 | </Col> |
64 | </Row> | 65 | </Row> |
65 | <Row> | 66 | <Row> |
66 | <Col xs={ 6 } sm={ 6 }> | 67 | <Col xs={ 6 } sm={ 6 }> |
67 | <FormGroup> | 68 | <FormGroup> |
68 | <ControlLabel>First Name</ControlLabel> | 69 | <ControlLabel>First Name</ControlLabel> |
69 | <FormControl | 70 | <FormControl |
70 | type="text" | 71 | type="text" |
71 | ref="orgName" | 72 | ref="orgName" |
72 | name="orgName" | 73 | name="orgName" |
73 | placeholder="School Name" | 74 | placeholder="School Name" |
74 | /> | 75 | /> |
75 | </FormGroup> | 76 | </FormGroup> |
76 | </Col> | 77 | </Col> |
77 | </Row> | 78 | </Row> |
78 | <Row> | 79 | <Row> |
79 | <Col xs={ 6 } sm={ 6 }> | 80 | <Col xs={ 6 } sm={ 6 }> |
80 | <FormGroup> | 81 | <FormGroup> |
81 | <ControlLabel>First Name</ControlLabel> | 82 | <ControlLabel>First Name</ControlLabel> |
82 | <FormControl | 83 | <FormControl |
83 | type="text" | 84 | type="text" |
84 | ref="firstName" | 85 | ref="firstName" |
85 | name="firstName" | 86 | name="firstName" |
86 | placeholder="First Name" | 87 | placeholder="First Name" |
87 | /> | 88 | /> |
88 | </FormGroup> | 89 | </FormGroup> |
89 | </Col> | 90 | </Col> |
90 | <Col xs={ 6 } sm={ 6 }> | 91 | <Col xs={ 6 } sm={ 6 }> |
91 | <FormGroup> | 92 | <FormGroup> |
92 | <ControlLabel>Last Name</ControlLabel> | 93 | <ControlLabel>Last Name</ControlLabel> |
93 | <FormControl | 94 | <FormControl |
94 | type="text" | 95 | type="text" |
95 | ref="lastName" | 96 | ref="lastName" |
96 | name="lastName" | 97 | name="lastName" |
97 | placeholder="Last Name" | 98 | placeholder="Last Name" |
98 | /> | 99 | /> |
99 | </FormGroup> | 100 | </FormGroup> |
100 | </Col> | 101 | </Col> |
101 | </Row> | 102 | </Row> |
102 | <FormGroup> | 103 | <FormGroup> |
103 | <ControlLabel>Email Address</ControlLabel> | 104 | <ControlLabel>Email Address</ControlLabel> |
104 | <FormControl | 105 | <FormControl |
105 | type="text" | 106 | type="text" |
106 | ref="emailAddress" | 107 | ref="emailAddress" |
107 | name="emailAddress" | 108 | name="emailAddress" |
108 | placeholder="Email Address" | 109 | placeholder="Email Address" |
109 | /> | 110 | /> |
110 | </FormGroup> | 111 | </FormGroup> |
111 | <FormGroup> | 112 | <FormGroup> |
112 | <ControlLabel>Password</ControlLabel> | 113 | <ControlLabel>Password</ControlLabel> |
113 | <FormControl | 114 | <FormControl |
114 | type="password" | 115 | type="password" |
115 | ref="password" | 116 | ref="password" |
116 | name="password" | 117 | name="password" |
117 | placeholder="Password" | 118 | placeholder="Password" |
118 | /> | 119 | /> |
119 | </FormGroup> | 120 | </FormGroup> |
120 | <Button type="submit" bsStyle="success">Sign Up</Button> | 121 | <Button type="submit" bsStyle="success">Sign Up</Button> |
121 | </form> | 122 | </form> |
122 | <p>Already have an account? <Link to="/login">Log In</Link>.</p> | 123 | <p>Already have an account? <Link to="/login">Log In</Link>.</p> |
123 | </Col> | 124 | </Col> |
124 | </Row> | 125 | </Row> |
125 | </div> | 126 | </div> |
126 | ); | 127 | ); |
127 | } | 128 | } |
128 | } | 129 | } |
129 | 130 |
imports/client/views/nonOrg/enter/signup.css
File was created | 1 | .Signup .row div{ | |
2 | display: block; | ||
3 | margin: auto; | ||
4 | left: 27%; | ||
5 | } | ||
6 |
imports/client/views/org/admin/students/StudentTable.js
1 | import _ from 'lodash'; | 1 | import _ from 'lodash'; |
2 | import { Meteor } from 'meteor/meteor'; | 2 | import { Meteor } from 'meteor/meteor'; |
3 | 3 | ||
4 | import React, { Component } from 'react'; | 4 | import React, { Component } from 'react'; |
5 | import { Link,browserHistory } from 'react-router'; | 5 | import { Link,browserHistory } from 'react-router'; |
6 | import { FormGroup,Panel,Table, | 6 | import { FormGroup,Panel,Table, |
7 | ButtonToolbar,Modal, | 7 | ButtonToolbar,Modal, |
8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; | 8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; |
9 | import { AddStudentForm } from './addStudentForm'; | 9 | import { AddStudentForm } from './addStudentForm'; |
10 | import {moment} from 'meteor/momentjs:moment' | ||
10 | 11 | ||
11 | export class StudentTable extends Component { | 12 | export class StudentTable extends Component { |
12 | 13 | ||
13 | constructor(props) { | 14 | constructor(props) { |
14 | super(props); | 15 | super(props); |
15 | this.state = { | 16 | this.state = { |
16 | show: false | 17 | show: false |
17 | }; | 18 | }; |
18 | this.onUpdate = this.onUpdate.bind(this); | 19 | this.onUpdate = this.onUpdate.bind(this); |
19 | }; | 20 | }; |
20 | onUpdate(key, value) { | 21 | onUpdate(key, value) { |
21 | this.setState({[key]: value}); | 22 | this.setState({[key]: value}); |
22 | }; | 23 | }; |
23 | 24 | ||
24 | render() { | 25 | render() { |
25 | return ( | 26 | return ( |
26 | <div className="panel panel-flat"> | 27 | <div className="panel panel-flat"> |
27 | <div className="panel-heading"> | 28 | <div className="panel-heading"> |
28 | <h5 className="panel-title">Student Details</h5> | 29 | <h5 className="panel-title">Student Details</h5> |
29 | <div className="heading-elements"> | 30 | <div className="heading-elements"> |
30 | <ul className="icons-list"> | 31 | <ul className="icons-list"> |
31 | <li><a data-action="collapse"></a></li> | 32 | <li><a data-action="collapse"></a></li> |
32 | <li><a data-action="reload"></a></li> | 33 | <li><a data-action="reload"></a></li> |
33 | </ul> | 34 | </ul> |
34 | </div> | 35 | </div> |
35 | </div> | 36 | </div> |
36 | <Table striped bordered condensed hover> | 37 | <Table striped bordered condensed hover> |
37 | <thead> | 38 | <thead> |
38 | <tr> | 39 | <tr> |
39 | <th>First Name</th> | 40 | <th>First Name</th> |
40 | <th>Last Name</th> | 41 | <th>Last Name</th> |
41 | <th>Class</th> | 42 | <th>Class</th> |
42 | <th>DOB</th> | 43 | <th>DOB</th> |
43 | <th>Status</th> | 44 | <th>Status</th> |
44 | <th className="text-center">Actions</th> | 45 | <th className="text-center">Actions</th> |
45 | </tr> | 46 | </tr> |
46 | </thead> | 47 | </thead> |
47 | <tbody> | 48 | <tbody> |
48 | { | 49 | { |
49 | this.props.students.map(function(student, i) | 50 | this.props.students.map(function(student, i) |
50 | { | 51 | { |
51 | return( | 52 | return( |
52 | <tr key={i}> | 53 | <tr key={i}> |
53 | <td>{student.firstName}</td> | 54 | <td>{student.firstName}</td> |
54 | <td>{student.lastName}</td> | 55 | <td>{student.lastName}</td> |
55 | <td>{student.class}</td> | 56 | <td>{student.class}</td> |
56 | <td>{}</td> | 57 | <td>{student.dob? moment(student.dob).format("LL") : <span></span>}</td> |
57 | <td><span className="label label-success">Active</span></td> | 58 | <td><span className="label label-success">Active</span></td> |
58 | <td className="text-center"> | 59 | <td className="text-center"> |
59 | <ul className="icons-list"> | 60 | <ul className="icons-list"> |
60 | <li className="dropdown"> | 61 | <li className="dropdown"> |
61 | <a href="#" className="dropdown-toggle" data-toggle="dropdown"> | 62 | <a href="#" className="dropdown-toggle" data-toggle="dropdown"> |
62 | <i className="icon-menu9"></i> | 63 | <i className="icon-menu9"></i> |
63 | </a> | 64 | </a> |
64 | <ul className="dropdown-menu dropdown-menu-right"> | 65 | <ul className="dropdown-menu dropdown-menu-right"> |
65 | <li><a href="#"><i className="icon-file-pdf"></i> Export to .pdf</a></li> | 66 | <li><a href="#"><i className="icon-file-pdf"></i> Export to .pdf</a></li> |
66 | <li><a href="#"><i className="icon-file-excel"></i> Export to .csv</a></li> | 67 | <li><a href="#"><i className="icon-file-excel"></i> Export to .csv</a></li> |
67 | <li><a href="#"><i className="icon-file-word"></i> Export to .doc</a></li> | 68 | <li><a href="#"><i className="icon-file-word"></i> Export to .doc</a></li> |
68 | </ul> | 69 | </ul> |
69 | </li> | 70 | </li> |
70 | </ul> | 71 | </ul> |
71 | </td> | 72 | </td> |
72 | </tr> | 73 | </tr> |
73 | ) | 74 | ) |
74 | }) | 75 | }) |
75 | } | 76 | } |
76 | </tbody> | 77 | </tbody> |
77 | </Table> | 78 | </Table> |
78 | </div> | 79 | </div> |
79 | ); | 80 | ); |
80 | }; | 81 | }; |
81 | 82 | ||
82 | }; | 83 | }; |
83 | 84 |
imports/client/views/org/admin/students/StudentView.js
1 | import _ from 'lodash'; | 1 | import _ from 'lodash'; |
2 | import { Meteor } from 'meteor/meteor'; | 2 | import { Meteor } from 'meteor/meteor'; |
3 | 3 | ||
4 | import React, { Component } from 'react'; | 4 | import React, { Component } from 'react'; |
5 | import { Link,browserHistory } from 'react-router'; | 5 | import { Link,browserHistory } from 'react-router'; |
6 | import { FormGroup,Panel,Table, | 6 | import { FormGroup,Panel,Table, |
7 | ButtonToolbar,Modal, | 7 | ButtonToolbar,Modal, |
8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; | 8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; |
9 | import { AddStudent } from './addStudent'; | 9 | import { AddStudent } from './addStudent'; |
10 | import { StudentTable } from './StudentTable'; | 10 | import { StudentTable } from './StudentTable'; |
11 | import { Header } from './Header'; | 11 | import { Header } from './Header'; |
12 | import { FabMenuView } from './FabMenu'; | 12 | import { FabMenuView } from './FabMenu'; |
13 | import { UploadCsv } from './UploadCsv'; | 13 | import { UploadCsv } from './UploadCsv'; |
14 | import { Students } from '/imports/collections/students/index'; | ||
14 | 15 | ||
15 | 16 | ||
16 | export class StudentView extends Component { | 17 | export class StudentView extends Component { |
17 | 18 | ||
18 | constructor(props) { | 19 | constructor(props) { |
19 | super(props); | 20 | super(props); |
20 | this.state = { | 21 | this.state = { |
21 | show: false, | 22 | show: false, |
22 | firstNameSearch: "", | 23 | firstNameSearch: "", |
23 | lastNameSearch: "", | 24 | lastNameSearch: "", |
24 | }; | 25 | }; |
25 | this.showModal = this.showModal.bind(this); | 26 | this.showModal = this.showModal.bind(this); |
26 | this.hideModal = this.hideModal.bind(this); | 27 | this.hideModal = this.hideModal.bind(this); |
27 | this.onUpdate = this.onUpdate.bind(this); | 28 | this.onUpdate = this.onUpdate.bind(this); |
28 | }; | 29 | }; |
29 | 30 | ||
30 | showModal() { | 31 | showModal() { |
31 | this.setState({show: true}); | 32 | this.setState({show: true}); |
32 | } | 33 | } |
33 | 34 | ||
34 | hideModal() { | 35 | hideModal() { |
35 | this.setState({show: false}); | 36 | this.setState({show: false}); |
36 | } | 37 | } |
37 | onUpdate(key, value) { | 38 | onUpdate(key, value) { |
38 | this.setState({[key]: value}); | 39 | this.setState({[key]: value}); |
39 | }; | 40 | }; |
40 | 41 | ||
41 | render() { | 42 | render() { |
43 | console.log(this.props); | ||
42 | firstNameSearch = this.state.firstNameSearch; | 44 | firstNameSearch = this.state.firstNameSearch; |
45 | lastNameSearch = this.state.lastNameSearch; | ||
43 | var students =_.filter(this.props.data.students,function(item){ | 46 | var students =_.filter(this.props.data.students,function(item){ |
44 | return _.includes(item.firstName.toLowerCase(),firstNameSearch.toLowerCase()); | 47 | return _.includes(item.firstName.toLowerCase(),firstNameSearch.toLowerCase()); |
45 | }); | 48 | }); |
46 | return ( | 49 | return ( |
47 | <div className="content has-detached-left"> | 50 | <div className="content has-detached-left"> |
48 | <div className="container-detached"> | 51 | <div className="container-detached"> |
49 | <div className="content-detached"> | 52 | <div className="content-detached"> |
50 | <Header/> | 53 | <Header/> |
51 | <StudentTable | 54 | <StudentTable |
52 | data = {this.props.data} | 55 | data = {this.props.data} |
53 | students = {students} | 56 | students = {students} |
54 | /> | 57 | /> |
55 | <AddStudent/> | 58 | <AddStudent/> |
56 | <UploadCsv /> | 59 | <UploadCsv /> |
57 | </div> | 60 | </div> |
58 | </div> | 61 | </div> |
59 | <div className="sidebar-detached affix-top"> | 62 | <div className="sidebar-detached affix-top"> |
60 | <div className="sidebar sidebar-default"> | 63 | <div className="sidebar sidebar-default"> |
61 | <div className="sidebar-content"> | 64 | <div className="sidebar-content"> |
62 | 65 | ||
63 | <div className="sidebar-category"> | 66 | <div className="sidebar-category"> |
64 | <div className="category-title"> | 67 | <div className="category-title"> |
65 | <span>Advanced Search</span> | 68 | <span>Advanced Search</span> |
66 | <ul className="icons-list"> | 69 | <ul className="icons-list"> |
67 | <li><a href="#" data-action="collapse"></a></li> | 70 | <li><a href="#" data-action="collapse"></a></li> |
68 | </ul> | 71 | </ul> |
69 | </div> | 72 | </div> |
70 | 73 | ||
71 | <div className="category-content"> | 74 | <div className="category-content"> |
72 | <form action="#"> | 75 | <form action="#"> |
73 | <div className="has-feedback has-feedback-left"> | 76 | <div className="has-feedback has-feedback-left"> |
74 | <input type="search" className="form-control" | 77 | <input type="search" className="form-control" |
75 | value={this.state.firstNameSearch} | 78 | value={this.state.firstNameSearch} |
76 | onChange={e=>this.onUpdate('firstNameSearch',e.target.value)} | 79 | onChange={e=>this.onUpdate('firstNameSearch',e.target.value)} |
77 | placeholder="First Name" | 80 | placeholder="First Name" |
78 | /> | 81 | /> |
79 | <div className="form-control-feedback"> | 82 | <div className="form-control-feedback"> |
80 | <i className="icon-search4 text-size-base text-muted"></i> | 83 | <i className="icon-search4 text-size-base text-muted"></i> |
81 | </div> | 84 | </div> |
82 | </div> | 85 | </div> |
83 | </form> | 86 | </form> |
84 | </div> | 87 | </div> |
85 | <div className="category-content"> | 88 | <div className="category-content"> |
86 | <form action="#"> | 89 | <form action="#"> |
87 | <div className="has-feedback has-feedback-left"> | 90 | <div className="has-feedback has-feedback-left"> |
88 | <input type="search" className="form-control" | 91 | <input type="search" className="form-control" |
89 | value={this.state.lastNameSearch} | 92 | value={this.state.lastNameSearch} |
90 | onChange={e=>this.onUpdate('lastNameSearch',e.target.value)} | 93 | onChange={e=>this.onUpdate('lastNameSearch',e.target.value)} |
91 | placeholder="Last Name" /> | 94 | placeholder="Last Name" /> |
92 | <div className="form-control-feedback"> | 95 | <div className="form-control-feedback"> |
93 | <i className="icon-search4 text-size-base text-muted"></i> | 96 | <i className="icon-search4 text-size-base text-muted"></i> |
94 | </div> | 97 | </div> |
95 | </div> | 98 | </div> |
96 | </form> | 99 | </form> |
97 | </div> | 100 | </div> |
98 | 101 | ||
99 | </div> | 102 | </div> |
100 | 103 | ||
101 | 104 | ||
102 | </div> | 105 | </div> |
103 | </div> | 106 | </div> |
104 | </div> | 107 | </div> |
105 | </div> | 108 | </div> |
106 | ); | 109 | ); |
107 | }; | 110 | }; |
108 | 111 | ||
109 | }; | 112 | }; |
110 | 113 |
imports/client/views/org/admin/students/UploadCsv.js
1 | import _ from 'lodash'; | 1 | import _ from 'lodash'; |
2 | import { Meteor } from 'meteor/meteor'; | 2 | import { Meteor } from 'meteor/meteor'; |
3 | 3 | ||
4 | import React, { Component } from 'react'; | 4 | import React, { Component } from 'react'; |
5 | import { Link,browserHistory } from 'react-router'; | 5 | import { Link,browserHistory } from 'react-router'; |
6 | import { FormGroup,Panel,Table, | 6 | import { FormGroup,Panel,Table, |
7 | ButtonToolbar,Modal, FieldGroup, | 7 | ButtonToolbar,Modal,ControlLabel,HelpBlock, |
8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; | 8 | FormControl,Glyphicon,Button } from 'react-bootstrap'; |
9 | import { AddStudentForm } from './addStudentForm'; | 9 | // import { AddStudentForm } from './addStudentForm'; |
10 | 10 | ||
11 | const style = { | 11 | const style = { |
12 | margin: 12, | 12 | margin: 12, |
13 | }; | 13 | }; |
14 | function FieldGroup({ id, label, help, ...props }) { | ||
15 | return ( | ||
16 | <FormGroup controlId={id}> | ||
17 | <ControlLabel>{label}</ControlLabel> | ||
18 | <FormControl {...props} /> | ||
19 | {help && <HelpBlock>{help}</HelpBlock>} | ||
20 | </FormGroup> | ||
21 | ); | ||
22 | } | ||
14 | export class UploadCsv extends Component { | 23 | export class UploadCsv extends Component { |
15 | constructor(props) { | 24 | constructor(props) { |
16 | super(props); | 25 | super(props); |
17 | this.state = { | 26 | this.state = { |
18 | show: false | 27 | show: false |
19 | }; | 28 | }; |
20 | this.showModal = this.showModal.bind(this); | 29 | this.showModal = this.showModal.bind(this); |
21 | this.hideModal = this.hideModal.bind(this); | 30 | this.hideModal = this.hideModal.bind(this); |
22 | this.onUpdate = this.onUpdate.bind(this); | 31 | this.onUpdate = this.onUpdate.bind(this); |
23 | }; | 32 | }; |
24 | 33 | ||
25 | showModal() { | 34 | showModal() { |
26 | this.setState({show: true}); | 35 | this.setState({show: true}); |
27 | } | 36 | } |
28 | 37 | ||
29 | hideModal() { | 38 | hideModal() { |
30 | this.setState({show: false}); | 39 | this.setState({show: false}); |
31 | } | 40 | } |
32 | onUpdate(key, value) { | 41 | onUpdate(key, value) { |
33 | this.setState({[key]: value}); | 42 | this.setState({[key]: value}); |
34 | }; | 43 | }; |
35 | 44 | ||
36 | render() { | 45 | render() { |
46 | console.log(this.props); | ||
37 | return ( | 47 | return ( |
38 | <ButtonToolbar> | 48 | <ButtonToolbar> |
39 | <Button bsStyle="primary" onClick={this.showModal}> | 49 | <Button bsStyle="primary" onClick={this.showModal}> |
40 | Upload CSV | 50 | Upload CSV |
41 | </Button> | 51 | </Button> |
42 | <Modal | 52 | <Modal |
43 | {...this.props} | 53 | {...this.props} |
44 | show={this.state.show} | 54 | show={this.state.show} |
45 | onHide={this.hideModal} | 55 | onHide={this.hideModal} |
46 | dialogClassName="custom-modal" | 56 | dialogClassName="custom-modal" |
47 | > | 57 | > |
48 | <Modal.Header closeButton> | 58 | <Modal.Header closeButton> |
49 | <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title> | 59 | <Modal.Title id="contained-modal-title-lg">New Student</Modal.Title> |
50 | </Modal.Header> | 60 | </Modal.Header> |
51 | <Modal.Body> | 61 | <Modal.Body> |
62 | <form> | ||
52 | <FieldGroup | 63 | <FieldGroup |
53 | id="formControlsFile" | 64 | id="formControlsFile" |
54 | type="file" | 65 | type="file" |
55 | label="File" | 66 | label="File" |
56 | help="Example block-level help text here." | 67 | help="Example block-level help text here." |
57 | /> | 68 | /> |
69 | </form> | ||
58 | </Modal.Body> | 70 | </Modal.Body> |
59 | <Modal.Footer> | 71 | <Modal.Footer> |
60 | <Button onClick={this.hideModal}>Close</Button> | 72 | <Button onClick={this.hideModal}>Close</Button> |
61 | </Modal.Footer> | 73 | </Modal.Footer> |
62 | </Modal> | 74 | </Modal> |
63 | </ButtonToolbar> | 75 | </ButtonToolbar> |
64 | ); | 76 | ); |
65 | }; | 77 | }; |
66 | 78 | ||
67 | }; | 79 | }; |
68 | 80 |
imports/client/views/org/admin/students/index.js
1 | // import { StudentDataController } from '/imports/client/views/org/admin/students/index' | 1 | // import { StudentDataController } from '/imports/client/views/org/admin/students/index' |
2 | import _ from 'lodash'; | 2 | import _ from 'lodash'; |
3 | import { | 3 | import { |
4 | composeWithTracker, | 4 | composeWithTracker, |
5 | compose, | 5 | compose, |
6 | composeAll | 6 | composeAll |
7 | } from 'react-komposer'; | 7 | } from 'react-komposer'; |
8 | import { Loading } from '/imports/client/components/Loading'; | 8 | import { Loading } from '/imports/client/components/Loading'; |
9 | 9 | ||
10 | import { Orgs } from '/imports/collections/orgs/index'; | 10 | import { Orgs } from '/imports/collections/orgs/index'; |
11 | import { Users } from '/imports/collections/users/index'; | 11 | import { Users } from '/imports/collections/users/index'; |
12 | import { StudentView } from './StudentView'; | 12 | import { StudentView } from './StudentView'; |
13 | import { Students } from '/imports/collections/students/index'; | 13 | import { Students } from '/imports/collections/students/index'; |
14 | 14 | ||
15 | 15 | ||
16 | const meteorTick = (props, onData) => { | 16 | const meteorTick = (props, onData) => { |
17 | 17 | ||
18 | const handles = [ | 18 | const handles = [ |
19 | Meteor.subscribe('users.current'), | 19 | Meteor.subscribe('users.current'), |
20 | Meteor.subscribe('orgs.current'), | 20 | Meteor.subscribe('orgs.current'), |
21 | Meteor.subscribe('users.forMyOrg'), | 21 | Meteor.subscribe('users.forMyOrg'), |
22 | Meteor.subscribe('student.forMyOrg'), | 22 | Meteor.subscribe('student.forMyOrg'), |
23 | ]; | 23 | ]; |
24 | 24 | ||
25 | if(_.every(handles, (handle) => (handle.ready()) )) { | 25 | if(_.every(handles, (handle) => (handle.ready()) )) { |
26 | const user = Users.current(); | 26 | const user = Users.current(); |
27 | const org = Orgs.current(); | 27 | const org = Orgs.current(); |
28 | const students = Users.find({"role":"STUDENT"}).fetch(); | 28 | students = Users.find({"role":"STUDENT"}).fetch(); |
29 | const StudentData = Students.find().fetch(); | 29 | studentData = Students.find().fetch(); |
30 | console.log("StudentData"); | 30 | for(var i=0; i< students.length; i++){ |
31 | console.log(StudentData); | 31 | for(var j=0; j< studentData.length; j++){ |
32 | if(students[i]._id == studentData[j].userId){ | ||
33 | students[i].class = studentData[j].class; | ||
34 | students[i].dob = studentData[j].dob; | ||
35 | } | ||
36 | } | ||
37 | } | ||
32 | onData(null, { | 38 | onData(null, { |
33 | data: { | 39 | data: { |
34 | user: user, | 40 | user: user, |
35 | org: org, | 41 | org: org, |
36 | students:students | 42 | students: students, |
43 | studentData: studentData | ||
37 | }, | 44 | }, |
38 | }); | 45 | }); |
39 | } | 46 | } |
40 | 47 | ||
41 | return () => { | 48 | return () => { |
42 | _.each(handles, (handle) => handle.stop() ); | 49 | _.each(handles, (handle) => handle.stop() ); |
43 | }; | 50 | }; |
44 | }; | 51 | }; |
45 | 52 | ||
46 | 53 | ||
47 | const reduxTick = (props, onData) => { | 54 | const reduxTick = (props, onData) => { |
48 | onData(null, { | 55 | onData(null, { |
49 | data: {} | 56 | data: {} |
50 | }); | 57 | }); |
51 | }; | 58 | }; |
52 | 59 | ||
53 | 60 | ||
54 | export const StudentDataController = composeAll( | 61 | export const StudentDataController = composeAll( |
55 | composeWithTracker(meteorTick, Loading), | 62 | composeWithTracker(meteorTick, Loading), |
56 | compose(reduxTick, Loading), | 63 | compose(reduxTick, Loading), |
57 | )(StudentView); | 64 | )(StudentView); |
58 | 65 |
imports/client/views/org/app/module/AppLayout.js
1 | import _ from 'lodash'; | 1 | import _ from 'lodash'; |
2 | import { Meteor } from 'meteor/meteor'; | 2 | import { Meteor } from 'meteor/meteor'; |
3 | import React, { Component } from 'react'; | 3 | import React, { Component } from 'react'; |
4 | import { Link } from 'react-router'; | 4 | import { Link } from 'react-router'; |
5 | import { Avatar } from '/imports/client/components/Avatar'; | 5 | import { Avatar } from '/imports/client/components/Avatar'; |
6 | import { Icon } from '/imports/client/components/Icon'; | 6 | import { Icon } from '/imports/client/components/Icon'; |
7 | import classNames from 'classnames'; | 7 | import classNames from 'classnames'; |
8 | import { EnterModule } from '/imports/client/views/org/enter/module/index'; | 8 | import { EnterModule } from '/imports/client/views/org/enter/module/index'; |
9 | // import { VerifyModule } from '/imports/client/views/verify/module/index'; | 9 | // import { VerifyModule } from '/imports/client/views/verify/module/index'; |
10 | import { Navbar,Modal, Nav, NavItem, | 10 | import { Navbar,Modal, Nav, NavItem, |
11 | Glyphicon, Collapse, | 11 | Glyphicon, Collapse, |
12 | NavbarToggler, NavbarBrand, | 12 | NavbarToggler, NavbarBrand, |
13 | NavLink, DropdownItem, DropdownToggle, DropdownMenu, | 13 | NavLink, DropdownItem, DropdownToggle, DropdownMenu, |
14 | NavDropdown, MenuItem } from 'react-bootstrap'; | 14 | NavDropdown, MenuItem } from 'react-bootstrap'; |
15 | 15 | import { VerifyModule } from '/imports/client/views/verify/module/index' | |
16 | |||
16 | var Accordion = require('react-bootstrap').Accordion; | 17 | var Accordion = require('react-bootstrap').Accordion; |
17 | var Panel = require('react-bootstrap').Panel; | 18 | var Panel = require('react-bootstrap').Panel; |
18 | export class AppLayout extends Component { | 19 | export class AppLayout extends Component { |
19 | 20 | ||
20 | render() { | 21 | render() { |
21 | console.log(this.props); | 22 | console.log(this.props); |
22 | const {user} = this.props.data; | 23 | const {user} = this.props.data; |
23 | 24 | ||
24 | if(!user) { | 25 | if(!user) { |
25 | return ( | 26 | return ( |
26 | <EnterModule | 27 | <EnterModule |
27 | pane = {this.props.location.query.enter} | 28 | pane = {this.props.location.query.enter} |
28 | location = {this.props.location} | 29 | location = {this.props.location} |
29 | /> | 30 | /> |
30 | ); | 31 | ); |
31 | } | 32 | } |
33 | if(!user.isEmailVerified()) { | ||
34 | return ( | ||
35 | <VerifyModule | ||
36 | pane = {this.props.location.query.verify} | ||
37 | location = {this.props.location} | ||
38 | /> | ||
39 | ); | ||
40 | } | ||
32 | return ( | 41 | return ( |
33 | 42 | ||
34 | <div className = "appLayout-box"> | 43 | <div className = "appLayout-box"> |
35 | <div className="page-container"> | 44 | <div className="page-container"> |
36 | <div className="page-content"> | 45 | <div className="page-content"> |
37 | <div className="sidebar sidebar-main sidebar-default"> | 46 | <div className="sidebar sidebar-main sidebar-default"> |
38 | <div className="sidebar-content"> | 47 | <div className="sidebar-content"> |
39 | 48 | ||
40 | <div className="sidebar-category sidebar-category-visible"> | 49 | <div className="sidebar-category sidebar-category-visible"> |
41 | <div className="category-content no-padding"> | 50 | <div className="category-content no-padding"> |
42 | <Nav className="navigation navigation-main navigation-accordion"> | 51 | <Nav className="navigation navigation-main navigation-accordion"> |
43 | <NavItem className="navigation-header"><span>#schoolname</span> <i className="icon-menu" title="Main pages"></i></NavItem> | 52 | <NavItem className="navigation-header"><span>#schoolname</span> <i className="icon-menu" title="Main pages"></i></NavItem> |
44 | <NavItem className="active" eventKey={1} href="#"><i className="icon-home4"></i> <span>Dashboard</span></NavItem> | 53 | <NavItem className="active" eventKey={1} href="#"><i className="icon-home4"></i> <span>Dashboard</span></NavItem> |
45 | 54 | ||
46 | <NavDropdown eventKey={2} title="Settings" id="setting"> | 55 | <NavDropdown eventKey={2} title="Settings" id="setting"> |
47 | <MenuItem eventKey={2.1}>Information</MenuItem> | 56 | <MenuItem eventKey={2.1}>Information</MenuItem> |
48 | <MenuItem eventKey={2.2}>Infrastructure</MenuItem> | 57 | <MenuItem eventKey={2.2}>Infrastructure</MenuItem> |
49 | <MenuItem eventKey={2.3}>Users</MenuItem> | 58 | <MenuItem eventKey={2.3}>Users</MenuItem> |
50 | <MenuItem eventKey={2.4}>Academic Settings</MenuItem> | 59 | <MenuItem eventKey={2.4}>Academic Settings</MenuItem> |
51 | <MenuItem eventKey={2.5}>Account Configuration</MenuItem> | 60 | <MenuItem eventKey={2.5}>Account Configuration</MenuItem> |
52 | 61 | ||
53 | </NavDropdown> | 62 | </NavDropdown> |
54 | <li> | 63 | <li> |
55 | <a href="#"><i className="icon-copy"></i> <span>Academic</span></a> | 64 | <a href="#"><i className="icon-copy"></i> <span>Academic</span></a> |
56 | <ul> | 65 | <ul> |
57 | <li><a href="../../../layout_1/LTR/index.html" id="layout1">Layout 1</a></li> | 66 | <li><a href="../../../layout_1/LTR/index.html" id="layout1">Layout 1</a></li> |
58 | <li><a href="index.html" id="layout2">Layout 2 <span className="label bg-warning-400">Current</span></a></li> | 67 | <li><a href="index.html" id="layout2">Layout 2 <span className="label bg-warning-400">Current</span></a></li> |
59 | <li><a href="../../../layout_3/LTR/index.html" id="layout3">Layout 3</a></li> | 68 | <li><a href="../../../layout_3/LTR/index.html" id="layout3">Layout 3</a></li> |
60 | <li><a href="../../../layout_4/LTR/index.html" id="layout4">Layout 4</a></li> | 69 | <li><a href="../../../layout_4/LTR/index.html" id="layout4">Layout 4</a></li> |
61 | <li><a href="../../../layout_5/LTR/index.html" id="layout5">Layout 5</a></li> | 70 | <li><a href="../../../layout_5/LTR/index.html" id="layout5">Layout 5</a></li> |
62 | <li className="disabled"><a href="../../../layout_6/LTR/index.html" id="layout6">Layout 6 <span className="label label-transparent">Coming soon</span></a></li> | 71 | <li className="disabled"><a href="../../../layout_6/LTR/index.html" id="layout6">Layout 6 <span className="label label-transparent">Coming soon</span></a></li> |
63 | </ul> | 72 | </ul> |
64 | </li> | 73 | </li> |
65 | <li> | 74 | <li> |
66 | <a href="#"><i className="glyphicon glyphicon-send"></i> <span>Communication</span></a> | 75 | <a href="#"><i className="glyphicon glyphicon-send"></i> <span>Communication</span></a> |
67 | <ul> | 76 | <ul> |
68 | <li><a href="#">Primary palette</a></li> | 77 | <li><a href="#">Primary palette</a></li> |
69 | <li><a href="#">Danger palette</a></li> | 78 | <li><a href="#">Danger palette</a></li> |
70 | <li><a href="#">Success palette</a></li> | 79 | <li><a href="#">Success palette</a></li> |
71 | <li><a href="#">Warning palette</a></li> | 80 | <li><a href="#">Warning palette</a></li> |
72 | <li><a href="#">Info palette</a></li> | 81 | <li><a href="#">Info palette</a></li> |
73 | <li className="navigation-divider"></li> | 82 | <li className="navigation-divider"></li> |
74 | <li><a href="#">Pink palette</a></li> | 83 | <li><a href="#">Pink palette</a></li> |
75 | <li><a href="#">Violet palette</a></li> | 84 | <li><a href="#">Violet palette</a></li> |
76 | <li><a href="#">Purple palette</a></li> | 85 | <li><a href="#">Purple palette</a></li> |
77 | <li><a href="#">Indigo palette</a></li> | 86 | <li><a href="#">Indigo palette</a></li> |
78 | <li><a href="colors_blue.html">Blue palette</a></li> | 87 | <li><a href="colors_blue.html">Blue palette</a></li> |
79 | <li><a href="colors_teal.html">Teal palette</a></li> | 88 | <li><a href="colors_teal.html">Teal palette</a></li> |
80 | <li><a href="colors_green.html">Green palette</a></li> | 89 | <li><a href="colors_green.html">Green palette</a></li> |
81 | <li><a href="colors_orange.html">Orange palette</a></li> | 90 | <li><a href="colors_orange.html">Orange palette</a></li> |
82 | <li><a href="colors_brown.html">Brown palette</a></li> | 91 | <li><a href="colors_brown.html">Brown palette</a></li> |
83 | <li><a href="colors_grey.html">Grey palette</a></li> | 92 | <li><a href="colors_grey.html">Grey palette</a></li> |
84 | <li><a href="colors_slate.html">Slate palette</a></li> | 93 | <li><a href="colors_slate.html">Slate palette</a></li> |
85 | </ul> | 94 | </ul> |
86 | </li> | 95 | </li> |
87 | <li> | 96 | <li> |
88 | <a href="#"><i className="glyphicon glyphicon-stats"></i> <span>Finance</span></a> | 97 | <a href="#"><i className="glyphicon glyphicon-stats"></i> <span>Finance</span></a> |
89 | <ul> | 98 | <ul> |
90 | <li><a href="starters/horizontal_nav.html">Horizontal navigation</a></li> | 99 | <li><a href="starters/horizontal_nav.html">Horizontal navigation</a></li> |
91 | <li><a href="starters/1_col.html">1 column</a></li> | 100 | <li><a href="starters/1_col.html">1 column</a></li> |
92 | <li><a href="starters/2_col.html">2 columns</a></li> | 101 | <li><a href="starters/2_col.html">2 columns</a></li> |
93 | <li> | 102 | <li> |
94 | <a href="#">3 columns</a> | 103 | <a href="#">3 columns</a> |
95 | <ul> | 104 | <ul> |
96 | <li><a href="starters/3_col_dual.html">Dual sidebars</a></li> | 105 | <li><a href="starters/3_col_dual.html">Dual sidebars</a></li> |
97 | <li><a href="starters/3_col_double.html">Double sidebars</a></li> | 106 | <li><a href="starters/3_col_double.html">Double sidebars</a></li> |
98 | </ul> | 107 | </ul> |
99 | </li> | 108 | </li> |
100 | <li><a href="starters/4_col.html">4 columns</a></li> | 109 | <li><a href="starters/4_col.html">4 columns</a></li> |
101 | <li> | 110 | <li> |
102 | <a href="#">Detached layout</a> | 111 | <a href="#">Detached layout</a> |
103 | <ul> | 112 | <ul> |
104 | <li><a href="starters/detached_left.html">Left sidebar</a></li> | 113 | <li><a href="starters/detached_left.html">Left sidebar</a></li> |
105 | <li><a href="starters/detached_right.html">Right sidebar</a></li> | 114 | <li><a href="starters/detached_right.html">Right sidebar</a></li> |
106 | <li><a href="starters/detached_sticky.html">Sticky sidebar</a></li> | 115 | <li><a href="starters/detached_sticky.html">Sticky sidebar</a></li> |
107 | </ul> | 116 | </ul> |
108 | </li> | 117 | </li> |
109 | <li><a href="starters/layout_boxed.html">Boxed layout</a></li> | 118 | <li><a href="starters/layout_boxed.html">Boxed layout</a></li> |
110 | <li className="navigation-divider"></li> | 119 | <li className="navigation-divider"></li> |
111 | <li><a href="starters/layout_navbar_fixed_main.html">Fixed main navbar</a></li> | 120 | <li><a href="starters/layout_navbar_fixed_main.html">Fixed main navbar</a></li> |
112 | <li><a href="starters/layout_navbar_fixed_secondary.html">Fixed secondary navbar</a></li> | 121 | <li><a href="starters/layout_navbar_fixed_secondary.html">Fixed secondary navbar</a></li> |
113 | <li><a href="starters/layout_navbar_fixed_both.html">Both navbars fixed</a></li> | 122 | <li><a href="starters/layout_navbar_fixed_both.html">Both navbars fixed</a></li> |
114 | <li><a href="starters/layout_fixed.html">Fixed layout</a></li> | 123 | <li><a href="starters/layout_fixed.html">Fixed layout</a></li> |
115 | </ul> | 124 | </ul> |
116 | </li> | 125 | </li> |
117 | <li><a href=""><i className="icon-file-stats"></i><span> Reports </span></a></li> | 126 | <li><a href=""><i className="icon-file-stats"></i><span> Reports </span></a></li> |
118 | <li><a href=""><i className="icon-design"></i> <span>Examinations</span></a></li> | 127 | <li><a href=""><i className="icon-design"></i> <span>Examinations</span></a></li> |
119 | 128 | ||
120 | </Nav> | 129 | </Nav> |
121 | </div> | 130 | </div> |
122 | </div> | 131 | </div> |
123 | </div> | 132 | </div> |
124 | </div> | 133 | </div> |
125 | {/*end sidebar*/} | 134 | {/*end sidebar*/} |
126 | <div className="content-wrapper"> | 135 | <div className="content-wrapper"> |
127 | 136 | ||
128 | <div className="page-header page-header-default"> | 137 | <div className="page-header page-header-default"> |
129 | <div className="breadcrumb-line"> | 138 | <div className="breadcrumb-line"> |
130 | <ul className="breadcrumb"> | 139 | <ul className="breadcrumb"> |
131 | <li><a href="index.html"><i className="icon-home2 position-left"></i> Users</a></li> | 140 | <li><a href="index.html"><i className="icon-home2 position-left"></i> Users</a></li> |
132 | <li className="active">Setup</li> | 141 | <li className="active">Setup</li> |
133 | </ul> | 142 | </ul> |
134 | 143 | ||
135 | <ul className="breadcrumb-elements"> | 144 | <ul className="breadcrumb-elements"> |
136 | <li><a href="#"><i className="icon-comment-discussion position-left"></i> Support</a></li> | 145 | <li><a href="#"><i className="icon-comment-discussion position-left"></i> Support</a></li> |
137 | <li className="dropdown"> | 146 | <li className="dropdown"> |
138 | <a href="#" className="dropdown-toggle" data-toggle="dropdown"> | 147 | <a href="#" className="dropdown-toggle" data-toggle="dropdown"> |
139 | <i className="icon-gear position-left"></i> | 148 | <i className="icon-gear position-left"></i> |
140 | Settings | 149 | Settings |
141 | <span className="caret"></span> | 150 | <span className="caret"></span> |
142 | </a> | 151 | </a> |
143 | 152 | ||
144 | <ul className="dropdown-menu dropdown-menu-right"> | 153 | <ul className="dropdown-menu dropdown-menu-right"> |
145 | <li><a href="#"><i className="icon-user-lock"></i> Account security</a></li> | 154 | <li><a href="#"><i className="icon-user-lock"></i> Account security</a></li> |
146 | <li><a href="#"><i className="icon-statistics"></i> Analytics</a></li> | 155 | <li><a href="#"><i className="icon-statistics"></i> Analytics</a></li> |
147 | <li><a href="#"><i className="icon-accessibility"></i> Accessibility</a></li> | 156 | <li><a href="#"><i className="icon-accessibility"></i> Accessibility</a></li> |
148 | <li className="divider"></li> | 157 | <li className="divider"></li> |
149 | <li><a href="#"><i className="icon-gear"></i> All settings</a></li> | 158 | <li><a href="#"><i className="icon-gear"></i> All settings</a></li> |
150 | </ul> | 159 | </ul> |
151 | </li> | 160 | </li> |
152 | </ul> | 161 | </ul> |
153 | </div> | 162 | </div> |
154 | </div> | 163 | </div> |
155 | </div> | 164 | </div> |
156 | {/*end content*/} | 165 | {/*end content*/} |
157 | 166 | ||
158 | </div> | 167 | </div> |
159 | </div> | 168 | </div> |
160 | 169 | ||
161 | <div className = "appLayout-wrapOuter"> | 170 | <div className = "appLayout-wrapOuter"> |
162 | <div className = "appLayout-wrapInner"> | 171 | <div className = "appLayout-wrapInner"> |
163 | <div className = "appLayout-menuWrap"> | 172 | <div className = "appLayout-menuWrap"> |
164 | 173 | ||
165 | </div> | 174 | </div> |
166 | <div className = "appLayout-contentWrap"> | 175 | <div className = "appLayout-contentWrap"> |
167 | <div className = "appLayout-content"> | 176 | <div className = "appLayout-content"> |
168 | { this.props.children } | 177 | { this.props.children } |
169 | </div> | 178 | </div> |
170 | </div> | 179 | </div> |
171 | </div> | 180 | </div> |
172 | </div> | 181 | </div> |
173 | </div> | 182 | </div> |
174 | ); | 183 | ); |
175 | }; | 184 | }; |
176 | 185 | ||
177 | }; | 186 | }; |
178 | 187 |