@@ -6,20 +6,25 @@ import { space } from 'styled-system';
6
6
7
7
import Layout from '../components/common/layout' ;
8
8
import BannerSection from '../components/common/banner' ;
9
- import { Container , Title , SubTitle } from '../utils/base.styles' ;
9
+ import { Container , Title , SubTitle , Button } from '../utils/base.styles' ;
10
10
import { baseEventsURL , futureEventsURL , pastEventsURL , imagePlaceholderURL } from '../utils/urls' ;
11
11
import EventCard from '../components/events/event-card' ;
12
12
13
13
const EventsSection = styled . section `
14
14
${ space } ;
15
15
background: #fff;
16
16
position: relative;
17
+ & .loadmore_div {
18
+ text-align: center;
19
+ }
17
20
` ;
18
21
19
22
export default class Events extends React . Component {
20
23
state = {
21
24
pastEvents : [ ] ,
25
+ pastEventsLoadLimit : 2 ,
22
26
futureEvents : [ ] ,
27
+ futureEventsLoadLimit : 2 ,
23
28
fetchError : null ,
24
29
loading : true ,
25
30
} ;
@@ -57,7 +62,7 @@ export default class Events extends React.Component {
57
62
}
58
63
}
59
64
60
- renderEvents ( events ) {
65
+ renderEvents ( events , loadLimit ) {
61
66
if ( this . state . loading ) {
62
67
return (
63
68
< SubTitle inverted color = "#222" >
@@ -79,7 +84,7 @@ export default class Events extends React.Component {
79
84
}
80
85
return (
81
86
< div >
82
- { events . map ( event => {
87
+ { events . slice ( 0 , loadLimit ) . map ( event => {
83
88
const regexForImageSrc = / < i m g .* ?s r c = " ( [ ^ " > ] * \/ ( [ ^ " > ] * ?) ) " .* ?> / g;
84
89
const imageSrc = regexForImageSrc . exec ( event . description ) ;
85
90
return (
@@ -100,6 +105,22 @@ export default class Events extends React.Component {
100
105
) ;
101
106
}
102
107
108
+ renderLoadMoreButton ( eventsTotalLength , loadLimit , isPastEvent ) {
109
+ return loadLimit >= eventsTotalLength ? null : (
110
+ < div className = "loadmore_div" >
111
+ < Button inverted medium onClick = { event => this . loadMore ( event , isPastEvent ) } >
112
+ Load more
113
+ </ Button >
114
+ </ div >
115
+ ) ;
116
+ }
117
+
118
+ loadMore ( isPastEvent ) {
119
+ return isPastEvent
120
+ ? this . setState ( { pastEventsLoadLimit : this . state . pastEventsLoadLimit + 5 } )
121
+ : this . setState ( { futureEventsLoadLimit : this . state . futureEventsLoadLimit + 5 } ) ;
122
+ }
123
+
103
124
render ( ) {
104
125
return (
105
126
< Layout >
@@ -115,15 +136,17 @@ export default class Events extends React.Component {
115
136
< Title inverted color = "#222" >
116
137
Upcoming Events
117
138
</ Title >
118
- { this . renderEvents ( this . state . futureEvents ) }
139
+ { this . renderEvents ( this . state . futureEvents , this . state . futureEventsLoadLimit ) }
140
+ { this . renderLoadMoreButton ( this . state . futureEvents . length , this . state . futureEventsLoadLimit , false ) }
119
141
</ Box >
120
142
</ Flex >
121
143
< Flex direction = "column" align = "center" justify = "center" >
122
144
< Box width = { [ 1 , 0.75 ] } >
123
145
< Title inverted color = "#222" >
124
146
Recent Events
125
147
</ Title >
126
- { this . renderEvents ( this . state . pastEvents ) }
148
+ { this . renderEvents ( this . state . pastEvents , this . state . pastEventsLoadLimit ) }
149
+ { this . renderLoadMoreButton ( this . state . pastEvents . length , this . state . pastEventsLoadLimit , true ) }
127
150
</ Box >
128
151
</ Flex >
129
152
</ Container >
0 commit comments