@@ -4,23 +4,45 @@ import { Link, Router } from 'react-router'
44import Error from 'components/Error/Error'
55import AreaService from 'services/Area'
66import ClientService from 'services/Client'
7- import styles from 'components/Client/Create /styles.css'
7+ import styles from 'components/Client/Save /styles.css'
88
99class Client extends React . Component
1010{
1111 constructor ( props , context ) {
1212 super ( props , context ) ;
1313 this . handleSubmit = this . handleSubmit . bind ( this ) ;
1414 this . formatFormData = this . formatFormData . bind ( this ) ;
15+ this . loadClient = this . loadClient . bind ( this ) ;
16+ this . handleChange = this . handleChange . bind ( this ) ;
1517 this . state = {
1618 error : '' ,
1719 areas : null ,
1820 client : { }
1921 } ;
2022 }
2123
24+ loadClient ( id ) {
25+ ClientService . find ( id ) . then ( ( response ) => {
26+ let client = response . data . client . shift ( ) ;
27+ client . createdAt = ''
28+ client . updatedAt = ''
29+ client . area = client . area . _id
30+ this . setState ( { client : client } )
31+ } ) . catch ( ( error ) => {
32+ this . setState ( { error : 'Error Found: Trying get client ' + id } ) ;
33+ let isValidResponse = typeof error . response . data !== 'undefined'
34+ if ( isValidResponse && typeof error . response . data . error !== 'undefined' ) {
35+ this . setState ( { error : error . response . data . error } ) ;
36+ }
37+ } ) ;
38+ }
39+
2240 componentWillMount ( ) {
2341
42+ if ( typeof this . props . params !== 'undefined' && typeof this . props . params . id !== 'undefined' ) {
43+ this . loadClient ( this . props . params . id ) ;
44+ }
45+
2446 AreaService . getAll ( ) . then ( ( response ) => {
2547 this . setState ( { areas : response . data . areas } ) ;
2648 } ) . catch ( ( error ) => {
@@ -31,35 +53,39 @@ class Client extends React.Component
3153 } ) ;
3254 }
3355
34- formatFormData ( data ) {
35- let client = { }
36- for ( let i in data ) {
37- client [ i ] = data [ i ] . value ;
38- }
56+ handleChange ( event ) {
57+ let client = this . state . client ;
58+ client [ event . target . name ] = event . target . value ;
59+ this . setState ( { client : client } ) ;
60+ }
3961
40- client . area = this . state . areas . filter ( ( area ) => client [ 'area' ] == area . _id ) . shift ( ) ;
62+ formatFormData ( ) {
63+ let client = this . state . client ;
64+ client . area = this . state . areas . filter ( ( area ) => client . area == area . _id ) . shift ( ) ;
4165 return client ;
4266 }
4367
44- handleSubmit ( e ) {
45- e . preventDefault ( ) ;
46-
47- let client = this . formatFormData ( this . refs ) ;
68+ handleSubmit ( event ) {
4869
49- this . setState ( { client : client } ) ;
70+ let client = this . formatFormData ( ) ;
71+ let id ;
72+ if ( typeof client . _id !== 'undefined' ) {
73+ id = client . _id ;
74+ }
5075
51- ClientService . save ( client ) . then ( ( response ) => {
76+ ClientService . save ( client , id ) . then ( ( response ) => {
5277 this . context . router . push ( "/clients" ) ;
5378 } ) . catch ( ( error ) => {
5479
55- this . setState ( { error : 'Error trying create client' } ) ;
80+ this . setState ( { error : 'Error trying save client' } ) ;
5681
5782 let responseValid = typeof error . response . data !== 'undefined' ;
5883
5984 if ( responseValid && typeof error . response . data . error !== 'undefined' ) {
6085 this . setState ( { error : error . response . data . error } ) ;
6186 }
6287 } ) ;
88+ event . preventDefault ( ) ;
6389 }
6490
6591 render ( ) {
@@ -75,59 +101,70 @@ class Client extends React.Component
75101 < div className = "columns is-vcentered" >
76102 < div className = "column is-4 is-offset-4" >
77103 < h1 className = "title" >
78- Register a Client
104+ Save Client
79105 </ h1 >
80106 < form onSubmit = { this . handleSubmit } >
81107 < div className = "box" >
82108 < label className = "label" > Name</ label >
83109 < p className = "control has-icon" >
84110 < input
85111 required = 'required'
86- ref = 'name'
87- className = "input marco"
112+ className = "input"
88113 type = "text"
89114 placeholder = "John Smith"
115+ name = 'name'
116+ value = { this . state . client . name }
117+ onChange = { this . handleChange }
90118 />
91119 < i className = "fa fa-id-card-o" aria-hidden = "true" />
92120 </ p >
93121 < label className = "label" > Phone</ label >
94122 < p className = "control has-icon" >
95123 < input
96- required = 'required'
97124 pattern = "[\(]\d{2}[\)]\d{4,5}[\-]\d{4}"
98- ref = 'phone'
99125 className = "input"
100126 type = "text"
101127 placeholder = "(21)99999-00000"
128+ name = 'phone'
129+ value = { this . state . client . phone }
130+ onChange = { this . handleChange }
102131 />
103132 < i className = "fa fa-phone" aria-hidden = "true" />
104133 </ p >
105134 < label className = "label" > Address</ label >
106135 < p className = "control has-icon" >
107136 < input
108137 required = 'required'
109- ref = 'address'
110138 className = "input"
111139 type = "text"
112140 placeholder = "Street 32 - Nº 23"
141+ name = 'address'
142+ value = { this . state . client . address }
143+ onChange = { this . handleChange }
113144 />
114145 < i className = "fa fa-address-card" aria-hidden = "true" />
115146 </ p >
116147 < label className = "label" > City</ label >
117148 < p className = "control has-icon" >
118149 < input
119150 required = 'required'
120- ref = 'city'
121151 className = "input"
122152 type = "text"
123153 placeholder = "London"
154+ name = 'city'
155+ value = { this . state . client . city }
156+ onChange = { this . handleChange }
124157 />
125158 < i className = "fa fa-address-book" aria-hidden = "true" />
126159 </ p >
127160 < label className = "label" > Area</ label >
128161 < p className = "control has-icon" >
129162 < span className = "select" >
130- < select ref = 'area' >
163+ < select
164+ name = 'area'
165+ value = { this . state . client . area }
166+ onChange = { this . handleChange }
167+ >
131168 {
132169 this . state . areas . map ( ( area , key ) => (
133170 < option value = { area . _id } key = { key } > { area . _id } </ option >
@@ -141,21 +178,25 @@ class Client extends React.Component
141178 < p className = "control has-icon" >
142179 < input
143180 required = 'required'
144- ref = 'frequency'
145181 className = "input"
146182 type = "number"
147183 placeholder = "10"
184+ name = 'frequency'
185+ value = { this . state . client . frequency }
186+ onChange = { this . handleChange }
148187 />
149188 < i className = "fa fa-refresh" aria-hidden = "true" />
150189 </ p >
151190 < label className = "label" > Ability</ label >
152191 < p className = "control has-icon" >
153192 < input
154193 required = 'required'
155- ref = 'ability'
156194 className = "input"
157195 type = "number"
158196 placeholder = "200"
197+ name = 'ability'
198+ value = { this . state . client . ability }
199+ onChange = { this . handleChange }
159200 />
160201 < i className = "fa fa-shopping-basket" aria-hidden = "true" />
161202 </ p >
0 commit comments