Skip to content

Commit c7de92c

Browse files
committed
Merge branch 'feature/create_area' into develop
2 parents 533ad95 + e415526 commit c7de92c

File tree

13 files changed

+605
-14
lines changed

13 files changed

+605
-14
lines changed

app/App.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import ListClientComponent from 'components/Client/List/Client'
1111
import ProfileClientComponent from 'components/Client/Profile/Client'
1212
import CreateClientComponent from 'components/Client/Create/Client'
1313
import CreateVisitComponent from 'components/Visit/Create/Visit'
14+
import CreateAreaComponent from 'components/Area/Create/Area'
1415

1516
ReactDOM.render(
1617
<Router history={hashHistory} >
@@ -19,10 +20,12 @@ ReactDOM.render(
1920
<Route path="clients" component={ListClientComponent} />
2021
<Route path="client" component={ CreateClientComponent } />
2122
<Route path="client/:id" component={ProfileClientComponent} />
22-
<Route path="area" component={AreaComponent} />
23+
<Route path="areas" component={AreaComponent} />
24+
<Route path="area" component={CreateAreaComponent} />
2325
<Route path="visit/:clientId/" component={CreateVisitComponent} />
2426
<Route path="visit/:id" component={AreaComponent} />
2527
</Route>
2628
</Router>,
2729
document.getElementById('app')
2830
);
31+

app/components/Area/Area.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ class Area extends React.Component
5757
}
5858
return (
5959
<div className="container hello">
60+
<div className="level header">
61+
<div className="level-left">
62+
<h2 className="title is-2">iClient</h2>
63+
</div>
64+
<div className="level-right">
65+
<Link to='/area' className="button is-info is-medium">
66+
<span className="icon">
67+
<i className="fa fa-plus"></i>
68+
</span>
69+
<span>New Area</span>
70+
</Link>
71+
</div>
72+
</div>
6073
{ this.state.areas }
6174
</div>
6275
);

app/components/Area/Create/Area.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import React from 'react';
2+
import { Link, Router } from 'react-router'
3+
4+
import Error from 'components/Error/Error'
5+
import AreaSelect from 'components/Area/Select/Area'
6+
import ClientService from 'services/Client'
7+
import AreaService from 'services/Area'
8+
9+
class Area extends React.Component
10+
{
11+
constructor(props, context) {
12+
super(props, context);
13+
this.handleSubmit = this.handleSubmit.bind(this);
14+
this.state = {
15+
error : '',
16+
area : {}
17+
};
18+
}
19+
20+
handleSubmit(e) {
21+
e.preventDefault();
22+
23+
let form = e.target;
24+
let formData = {
25+
_id : this.refs.area.value,
26+
parent: form.querySelector('[name="parent"]').value
27+
};
28+
29+
this.setState({area: formData});
30+
31+
AreaService.save(formData).then((response) => {
32+
this.context.router.push("/clients");
33+
}).catch((error) => {
34+
35+
this.setState({error: 'Error trying create area'});
36+
37+
let responseValid = typeof error.response.data !== 'undefined';
38+
39+
if (responseValid && typeof error.response.data.error !== 'undefined') {
40+
this.setState({error: error.response.data.error});
41+
}
42+
});
43+
}
44+
45+
render() {
46+
if (this.state.error) {
47+
return (<Error error={this.state.error} />);
48+
}
49+
50+
return (
51+
<div className="container">
52+
<div className="columns is-vcentered">
53+
<div className="column is-4 is-offset-4">
54+
<h1 className="title">
55+
Create Area
56+
</h1>
57+
<form onSubmit={this.handleSubmit}>
58+
<div className="box">
59+
<label className="label">Area</label>
60+
<p className="control has-icon">
61+
<input
62+
ref='area'
63+
className="input"
64+
type="text"
65+
placeholder="Center"
66+
required="required"
67+
/>
68+
<i className="fa fa-map-marker" />
69+
</p>
70+
<label className="label">Parent</label>
71+
<AreaSelect
72+
select={ { name : 'parent' } }
73+
/>
74+
<hr />
75+
<p className="control">
76+
<button className="button is-primary">Save</button>
77+
<Link to='/clients' className="button">
78+
<span>Cancel</span>
79+
</Link>
80+
</p>
81+
</div>
82+
</form>
83+
</div>
84+
</div>
85+
</div>
86+
);
87+
}
88+
}
89+
90+
Area.contextTypes = {
91+
router: React.PropTypes.object.isRequired
92+
};
93+
94+
export default Area;
95+

app/components/Area/Select/Area.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import React from 'react';
2+
3+
import Error from 'components/Error/Error'
4+
import AreaService from 'services/Area'
5+
import styles from 'components/Area/Select/styles.css'
6+
7+
class Area extends React.Component
8+
{
9+
constructor(props, context) {
10+
super(props, context);
11+
this.state = {
12+
error : '',
13+
areas : null,
14+
};
15+
}
16+
17+
componentWillMount() {
18+
19+
AreaService.getAll().then((response) => {
20+
this.setState({areas: response.data.areas});
21+
}).catch((error) => {
22+
this.setState({error: 'Error Found: Trying get areas'});
23+
let isValidResponse = typeof error.response.data !== 'undefined';
24+
if (isValidResponse && typeof error.response.data.error !== 'undefined') {
25+
this.setState({error: error.response.data.error});
26+
}
27+
});
28+
}
29+
30+
render() {
31+
if (this.state.error) {
32+
return (<Error error={this.state.error} />);
33+
}
34+
if (!this.state.areas) {
35+
return <div>Loading...</div>;
36+
}
37+
38+
const select = Object.assign({}, this.props.select);
39+
40+
return (
41+
<p className="control has-icon">
42+
<span className="select">
43+
<select {...select} >
44+
{
45+
this.state.areas.map((area, key) => (
46+
<option value={ area._id } key={ key }>{ area._id}</option>
47+
))
48+
}
49+
</select>
50+
</span>
51+
<i className="fa fa-map-marker" aria-hidden="true" />
52+
</p>
53+
);
54+
}
55+
}
56+
57+
export default Area;
58+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
span.select select {
2+
padding-left: 30px;
3+
}
4+

app/components/Client/Create/Client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ class Client extends React.Component
161161
</p>
162162
<hr />
163163
<p className="control">
164-
<button className="button is-primary">Register</button>
164+
<button className="button is-primary">Save</button>
165165
<Link to='/clients' className="button">
166166
<span>Cancel</span>
167167
</Link>

app/components/Menu/Menu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Menu extends React.Component{
1414
links: [
1515
[ '/', 'Home'],
1616
['/clients', 'Clients'],
17-
['/area', 'Areas']
17+
['/areas', 'Areas']
1818
]
1919
};
2020
}

app/components/Visit/Create/Visit.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class Visit extends React.Component
4646
this.setState({visit: visit});
4747

4848
VisitService.save(visit).then((response) => {
49-
this.context.router.push("/area");
49+
this.context.router.push("/clients");
5050
}).catch((error) => {
5151

5252
this.setState({error: 'Error trying create visit'});
@@ -104,7 +104,13 @@ class Visit extends React.Component
104104
required="required"
105105
/>
106106
</p>
107-
<button className="button is-primary" >Save</button>
107+
<hr />
108+
<p className="control">
109+
<button className="button is-primary">Save</button>
110+
<Link to='/clients' className="button">
111+
<span>Cancel</span>
112+
</Link>
113+
</p>
108114
</div>
109115
</div>
110116
<div className="card-image">

app/services/Area.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,24 @@ import axios from 'axios';
22

33
const Area = {
44

5-
getAll() {
6-
let url = [HOST, 'api', 'v1', 'area'];
5+
getEntryPoint() {
6+
return [ HOST, 'api', 'v1', 'area' ];
7+
},
78

8-
let config = {
9+
getConfig() {
10+
return {
911
headers: {
1012
Authorization : window.localStorage.getItem('token')
1113
}
1214
};
13-
return axios.get(url.join('/'), config);
15+
},
16+
17+
getAll() {
18+
return axios.get(this.getEntryPoint().join('/'), this.getConfig());
19+
},
20+
21+
save(data) {
22+
return axios.post(this.getEntryPoint().join('/'), data, this.getConfig());
1423
}
1524
};
1625

0 commit comments

Comments
 (0)