@@ -2,7 +2,7 @@ import * as React from 'react/addons';
22import * as GreetingActions from '../actions/GreetingActions' ;
33
44interface Props {
5- targetOfGreeting : string ;
5+ newGreeting : string ;
66}
77
88class WhoToGreet extends React . Component < Props , any > {
@@ -11,18 +11,41 @@ class WhoToGreet extends React.Component<Props, any> {
1111 }
1212
1313 static propTypes : React . ValidationMap < Props > = {
14- targetOfGreeting : React . PropTypes . string . isRequired
14+ newGreeting : React . PropTypes . string . isRequired
1515 }
1616
1717 render ( ) {
1818 return (
19- < input type = "text" value = { this . props . targetOfGreeting } onChange = { this . _handleTargetOfGreetingChange } />
19+ < form role = "form" >
20+ < div className = "form-group" >
21+ < input type = "text" className = "form-control" placeholder = "Who would you like to greet?"
22+ value = { this . props . newGreeting }
23+ onChange = { this . _handleNewGreetingChange } />
24+ < button type = "submit" className = "btn btn-default btn-primary"
25+ onClick = { this . _onSubmit }
26+ disabled = { this . _preventSubmission } >
27+ Add greeting
28+ </ button >
29+ </ div >
30+ </ form >
2031 ) ;
2132 }
2233
23- _handleTargetOfGreetingChange = ( event ) => {
24- const { target : { value : targetOfGreeting } } = event ;
25- GreetingActions . greetingChanged ( targetOfGreeting ) ;
34+ get _preventSubmission ( ) {
35+ return ! this . props . newGreeting ;
36+ }
37+
38+ _handleNewGreetingChange = ( event ) => {
39+ const { target : { value : newGreeting } } = event ;
40+ GreetingActions . newGreetingChanged ( newGreeting ) ;
41+ }
42+
43+ _onSubmit = ( event ) => {
44+ event . preventDefault ( ) ;
45+
46+ if ( ! this . _preventSubmission ) {
47+ GreetingActions . addGreeting ( this . props . newGreeting ) ;
48+ }
2649 }
2750}
2851
0 commit comments