@@ -9,13 +9,28 @@ export default class Meetup extends React.Component {
99 state = {
1010 name : '' ,
1111 time : Date . now ( ) ,
12- venue : { name : '' }
12+ venue : { name : '' } ,
13+ loading : false ,
14+ error : false
1315 }
1416
1517 componentDidMount ( ) {
18+ this . setState ( {
19+ loading : true ,
20+ error : false
21+ } )
1622 window . fetch ( NEXT_MEETUP_URI )
23+ . then ( ( res ) => {
24+ // Gotta love network errors...
25+ if ( ! res . ok ) throw Error ( response . statusText )
26+ return response
27+ } )
1728 . then ( ( res ) => res . json ( ) )
18- . then ( ( json ) => this . setState ( json ) )
29+ . then ( ( json ) => this . setState ( {
30+ ...json ,
31+ loading : false
32+ } ) )
33+ . catch ( _ => this . setState ( { loading : false , error : true } ) )
1934 }
2035
2136 render ( ) {
@@ -34,16 +49,33 @@ export default class Meetup extends React.Component {
3449 rsvpButton : { }
3550 }
3651
37- return (
38- < div className = "next-event" >
52+ const MeetupDescription = ( { name, time, venue} ) => ( < div className = "next-event" >
3953 < div className = "next-event-tagline" >
4054 < strong > Next Event:</ strong >
4155 < div className = "event-name" >
42- { this . state . name }
56+ { name }
4357 </ div >
44- < span className = "next-event-timestamp" > { format ( new Date ( this . state . time ) , 'dddd, MMMM Do, YYYY' ) } at < strong > { this . state . venue . name } </ strong > </ span >
58+ {
59+ ( time && venue && venue . name ) &&
60+ ( < span className = "next-event-timestamp" > { format ( new Date ( time ) , 'dddd, MMMM Do, YYYY' ) } at < strong > { venue . name } </ strong > </ span > )
61+ }
4562 </ div >
46- </ div >
47- )
63+ </ div > )
64+
65+ if ( this . state . loading )
66+ return ( < MeetupDescription
67+ name = { 'Loading...' }
68+ /> )
69+
70+ if ( this . state . error )
71+ return ( < MeetupDescription
72+ name = { ( < a href = 'https://meetup.com/javascriptmn' > Check Meetup.com for updates</ a > ) }
73+ /> )
74+
75+ return ( < MeetupDescription
76+ name = { this . state . name }
77+ time = { this . state . time }
78+ venue = { this . state . venue }
79+ /> )
4880 }
4981}
0 commit comments