1
1
import React from 'react' ;
2
2
import fetch from 'isomorphic-unfetch' ;
3
- import { Card , Divider } from 'semantic-ui-react' ;
3
+ import { Card , Divider , Dimmer , Loader } from 'semantic-ui-react' ;
4
4
5
5
import publicPage from '../hocs/public-page' ;
6
6
import {
@@ -11,7 +11,13 @@ import {
11
11
import RowEvent from '../components/row-events' ;
12
12
13
13
class Events extends React . Component {
14
- static async getInitialProps ( ) {
14
+ state = {
15
+ pastEvents : null ,
16
+ futureEvents : null ,
17
+ fetchError : null ,
18
+ loading : true ,
19
+ } ;
20
+ async componentDidMount ( ) {
15
21
try {
16
22
const pastEvents = await fetch (
17
23
`${ reverseProxyCORS } ${ pastEventsMeetupURL } ` ,
@@ -25,21 +31,72 @@ class Events extends React.Component {
25
31
if ( res . ok ) return res . json ( ) ;
26
32
throw new Error ( 'Failed to Retrieve Events' ) ;
27
33
} ) ;
28
- return {
34
+ await this . setState ( {
29
35
pastEvents,
30
36
futureEvents,
31
37
fetchError : null ,
32
- } ;
38
+ loading : false ,
39
+ } ) ;
33
40
} catch ( err ) {
34
41
console . log ( err ) ;
35
- return {
42
+ await this . setState ( {
36
43
pastEvents : null ,
37
44
futureEvents : null ,
38
45
fetchError : err . message ,
39
- } ;
46
+ loading : false ,
47
+ } ) ;
40
48
}
41
49
}
42
-
50
+ renderEvents ( ) {
51
+ if ( this . state . fetchError ) {
52
+ return < div > { this . state . fetchError } </ div > ;
53
+ }
54
+ return (
55
+ < div >
56
+ < section >
57
+ < h2 > Upcoming events</ h2 >
58
+ < div >
59
+ { this . state . futureEvents . map ( event => (
60
+ < Card . Group key = { event . id } >
61
+ < RowEvent
62
+ name = { event . name }
63
+ yesCount = { event . yes_rsvp_count }
64
+ time = { event . time }
65
+ venue = { event . venue }
66
+ link = { event . link }
67
+ status = { event . status }
68
+ />
69
+ </ Card . Group >
70
+ ) ) }
71
+ </ div >
72
+ </ section >
73
+ < Divider />
74
+ < section >
75
+ < h2 > Recent events</ h2 >
76
+ < div >
77
+ { this . state . pastEvents . map ( event => (
78
+ < Card . Group key = { event . id } >
79
+ < RowEvent
80
+ key = { event . id }
81
+ name = { event . name }
82
+ yesCount = { event . yes_rsvp_count }
83
+ time = { event . time }
84
+ venue = { event . venue }
85
+ link = { event . link }
86
+ status = { event . status }
87
+ />
88
+ </ Card . Group >
89
+ ) ) }
90
+ </ div >
91
+ </ section >
92
+ < style jsx > { `
93
+ section {
94
+ margin: 50px 0;
95
+ }
96
+ ` } </ style >
97
+ </ div >
98
+ ) ;
99
+ }
43
100
render ( ) {
44
101
return (
45
102
< div >
@@ -48,47 +105,12 @@ class Events extends React.Component {
48
105
< h2 > Because you cannot change the world alone</ h2 >
49
106
</ div >
50
107
< main >
51
- { this . props . fetchError ? (
52
- < div > { this . props . fetchError } </ div >
108
+ { this . state . loading ? (
109
+ < Dimmer active >
110
+ < Loader indeterminate > Fetching Events</ Loader >
111
+ </ Dimmer >
53
112
) : (
54
- < div >
55
- < section >
56
- < h2 > Upcoming events</ h2 >
57
- < div >
58
- { this . props . futureEvents . map ( event => (
59
- < Card . Group key = { event . id } >
60
- < RowEvent
61
- name = { event . name }
62
- yesCount = { event . yes_rsvp_count }
63
- time = { event . time }
64
- venue = { event . venue }
65
- link = { event . link }
66
- status = { event . status }
67
- />
68
- </ Card . Group >
69
- ) ) }
70
- </ div >
71
- </ section >
72
- < Divider />
73
- < section >
74
- < h2 > Recent events</ h2 >
75
- < div >
76
- { this . props . pastEvents . map ( event => (
77
- < Card . Group key = { event . id } >
78
- < RowEvent
79
- key = { event . id }
80
- name = { event . name }
81
- yesCount = { event . yes_rsvp_count }
82
- time = { event . time }
83
- venue = { event . venue }
84
- link = { event . link }
85
- status = { event . status }
86
- />
87
- </ Card . Group >
88
- ) ) }
89
- </ div >
90
- </ section >
91
- </ div >
113
+ this . renderEvents ( )
92
114
) }
93
115
</ main >
94
116
< style jsx > { `
@@ -115,9 +137,6 @@ class Events extends React.Component {
115
137
color: #df1cb5;
116
138
font-weight: 900;
117
139
}
118
- section {
119
- margin: 50px 0;
120
- }
121
140
` } </ style >
122
141
</ div >
123
142
) ;
0 commit comments