Passed
Push — feature/homepage-matches-tsx ( a06bca...c4b45a )
by Kevin Van
04:39
created

IndexPage.renderSocialMediaArticle   A

Complexity

Conditions 1

Size

Total Lines 38
Code Lines 35

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 35
dl 0
loc 38
rs 9.0399
c 0
b 0
f 0
cc 1
1
import React, { Component, Fragment } from "react"
2
import { graphql, Link } from "gatsby"
3
4
import Layout from "../layouts/index"
5
6
import SEO from "../components/seo"
7
import MatchesOverview from "../components/matches-overview"
8
import MatchesSlider from "../components/MatchesSlider"
9
import MatchesTabs from "../components/MatchesTabs"
10
import { NewsItemFeatured, NewsItemCardRatio, KcvvTvCard } from "../components/news-item"
11
import { CardImage } from "../components/cards"
12
import UpcomingEvent from "../components/upcoming-event"
13
import PlayerFeatured from "../components/player--featured"
14
15
import MyMakro from "../images/tag-mymakro.png"
16
import Trooper from "../images/tag-trooper.png"
17
import Card from "../components/Card"
18
19
class IndexPage extends Component {
20
  renderMatchSlider = () => (
21
    <section className={`grid-container full`}>
22
      <MatchesSlider />
23
    </section>
24
  )
25
  renderSocialMediaArticle = () => (
26
    <article className={`medium-6 large-12 cell social`}>
27
      <div className={`social-sidebar__wrapper`}>
28
        <a
29
          href="https://facebook.com/KCVVElewijt"
30
          className="btn-social-counter btn-social-counter--fb"
31
          target="_blank"
32
          rel="noopener noreferrer"
33
        >
34
          <div className="btn-social-counter__icon">
35
            <i className="fa fa-facebook"></i>
36
          </div>
37
          <h5 className="btn-social-counter__title">Volg onze Facebook pagina</h5>
38
        </a>
39
        <a
40
          href="https://twitter.com/kcvve"
41
          className="btn-social-counter btn-social-counter--twitter"
42
          target="_blank"
43
          rel="noopener noreferrer"
44
        >
45
          <div className="btn-social-counter__icon">
46
            <i className="fa fa-twitter"></i>
47
          </div>
48
          <h5 className="btn-social-counter__title">Volg ons op Twitter</h5>
49
        </a>
50
        <a
51
          href="http://www.instagram.com/kcvve"
52
          className="btn-social-counter btn-social-counter--instagram"
53
          target="_blank"
54
          rel="noopener noreferrer"
55
        >
56
          <div className="btn-social-counter__icon">
57
            <i className="fa fa-instagram"></i>
58
          </div>
59
          <h5 className="btn-social-counter__title">Volg ons op Instagram</h5>
60
        </a>
61
      </div>
62
    </article>
63
  )
64
  renderMakroArticle = () => (
65
    <Card className={`medium-6 large-12 cell card`} title="MyMakro">
66
      <p>
67
        Link nu jouw Makro voordeelkaart aan onze vereniging. Bij elke aankoop bij Makro en partners steun je KCVV
68
        Elewijt!
69
      </p>
70
      <p>
71
        <img src={MyMakro} alt="QR Code MyMakro" style={{ width: `100%` }} />
72
      </p>
73
      <p>
74
        Scan bovenstaande QR-code met je camera op GSM, of surf naar{` `}
75
        <a
76
          href="https://my.makro.be/nl/link-vereniging/02277464"
77
          target="_blank"
78
          rel="noopener noreferrer"
79
          title="MyMakro link voor KCVV Elewijt"
80
          className={`rich-link`}
81
        >
82
          https://my.makro.be/nl/link-vereniging/02277464
83
        </a>
84
        .
85
      </p>
86
      <p>Onze vereniging dankt jullie van harte!</p>
87
    </Card>
88
  )
89
  renderTrooperArticle = () => (
90
    <Card className={`medium-6 large-12 cell card`} title="Trooper">
91
      <p>
92
        Trooper werkt samen met een groot aantal webshops die zich in de kijker willen zetten. In ruil voor een extra
93
        klik via Trooper krijgen wij een percentje op jouw volgende bestelling.
94
      </p>
95
      <p>
96
        <img src={Trooper} alt="QR Code Trooper" style={{ width: `100%` }} />
97
      </p>
98
      <p>
99
        Scan bovenstaande QR-code met je camera op GSM, of surf naar{` `}
100
        <a
101
          href="https://trooper.be/kcvvelewijt"
102
          target="_blank"
103
          rel="noopener noreferrer"
104
          title="Trooper link voor KCVV Elewijt"
105
          className={`rich-link`}
106
        >
107
          https://trooper.be/kcvvelewijt
108
        </a>
109
        .
110
      </p>
111
      <p>
112
        <a href="/news/2020-04-12-steun-kcvv-elewijt-trooper-mymakro" className={`rich-link`}>
113
          Lees er hier meer over!
114
        </a>
115
      </p>
116
    </Card>
117
  )
118
  renderYouthCalendarArticle = () => (
119
    <Card className={`medium-6 large-12 cell`} title="Jeugdploegen" hasTable={true}>
120
      <MatchesOverview season="2021" regnumber="00055" exclude="['2A', '4E']" />
121
    </Card>
122
  )
123
124
  renderBTeamCalendarArticle = () => (
125
    <Card className={`medium-6 large-12 cell`} title="The B-Team" hasTable={true}>
126
      <MatchesTabs teamId="2" />
127
    </Card>
128
  )
129
  renderATeamCalendarArticle = () => (
130
    <Card className={`medium-6 large-12 cell`} title="The A-Team" hasTable={true}>
131
      <MatchesTabs teamId="1" />
132
    </Card>
133
  )
134
135
  renderTablebooker = () => (
136
    <>
137
      <Card className={`medium-6 large-12 cell card`} title="Mosselfestijn" titleIcon="fa-cutlery">
138
        <p>
139
          Op vrijdag 9, zaterdag 10 en zondag 11 oktober 2020 vindt ons jaarlijkse Mosselfestijn weer plaats. Om de
140
          spreiding te kunnen garanderen en wachttijden aan de ingang zoveel mogelijk te beperken werken we dit jaar met
141
          een reservatiesysteem. Hieronder kan je zelf jouw gewenste tijdstip en gezelschap selecteren en een tafel
142
          boeken (voor 07/10/2020).
143
        </p>
144
        <p>
145
          Telefonisch reserveren kan dagelijks tussen 18u en 21u op het nummer{` `}
146
          <a href="tel:+32498735984">0498.73.59.84</a>
147
        </p>
148
        <p>
149
          Ter plaatse een tafel vragen kan, naargelang de beschikbaarheid op dat moment, maar hou er rekening mee dat we
150
          onze capaciteit hebben moeten verlagen om aan de regelgeving te kunnen voldoen. Wie zeker wil zijn van zijn
151
          plek kan beter reserveren.
152
        </p>
153
      </Card>
154
      <article className={`medium-6 large-12 cell tablebooker`}>
155
        <tbkr-bm-widget
156
          restaurant-id="34742560"
157
          source="website"
158
          use-modal="0"
159
          lang="nl"
160
          theme="light"
161
        ></tbkr-bm-widget>
162
        <script src="https://reservations.tablebooker.com/tbkr-widget-import.min.js"></script>
163
      </article>
164
    </>
165
  )
166
167
  renderWebsiteFeedbackArticle = () => (
168
    <Card className={`medium-6 large-12 cell card`} title="Website feedback" titleIcon="fa-commenting-o">
169
      <p>
170
        Na lang zwoegen is onze nieuwe website eíndelijk online geraakt! We zijn heel benieuwd naar jullie mening of
171
        feedback. Als jullie vinden dat er iets ontbreekt, of als je bepaalde fouten tegenkomt, zouden we het ten
172
        zeerste appreciëren als je ons even iets laat weten op{` `}
173
        <a href="mailto:[email protected]" className={`rich-link`}>
174
          [email protected]
175
        </a>
176
        !
177
      </p>
178
    </Card>
179
  )
180
  renderExtraContentFooter = (preseason) => (
181
    <section className="grid-container site-content">
182
      <div className="grid-x grid-margin-x">
183
        <section className={`cell large-12 featured-article`}>
184
          <CardImage title="Update voorbereiding 2020-2021" localFile={preseason} link="/games" metadata={false} />
185
        </section>
186
      </div>
187
    </section>
188
  )
189
190
  // convertGraphqlToPlayerObject = (player) => {
191
  //   return {
192
  //     nameFirst: player.field_firstname,
193
  //     nameLast: player.field_lastname,
194
  //     shirtNr: player.field_shirtnumber,
195
  //     position: player.field_position,
196
  //     imageSrc:
197
  //       player.relationships.field_image.localFile.childImageSharp.fixed.src,
198
  //     link: player.path.alias,
199
  //   }
200
  // }
201
202
  // renderPlayerOfTheWeek = (featuredPlayer) =>
203
  //   featuredPlayer.edges.map(
204
  //     ({ node: potw }) =>
205
  //       potw.relationships.field_player && (
206
  //         <article
207
  //           className={"medium-6 large-12 cell card"}
208
  //           key={potw.relationships.field_player.field_firstname}
209
  //         >
210
  //           <header className={"card__header"}>
211
  //             <h4>Speler van de week</h4>
212
  //           </header>
213
  //           <PlayerFeatured
214
  //             player={this.convertGraphqlToPlayerObject(
215
  //               potw.relationships.field_player
216
  //             )}
217
  //           />
218
  //         </article>
219
  //       )
220
  //   )
221
222
  renderPosts = (posts) => {
223
    let articleCount = 0
224
    let kcvvTvCount = 0
225
226
    return posts.map(({ node }, i) => {
227
      switch (node.internal.type) {
228
        case `node__article`:
229
          node.field_featured && (articleCount = articleCount + 2)
230
          !node.field_featured && articleCount++
231
          return (
232
            <Fragment key={i}>
233
              {node.field_featured && <NewsItemFeatured node={node} />}
234
              {!node.field_featured && <NewsItemCardRatio node={node} teaser={true} />}
235
            </Fragment>
236
          )
237
        case `node__kcvv_tv`:
238
          if (kcvvTvCount === 0) {
239
            articleCount = articleCount + 2
240
            kcvvTvCount++
241
            return (
242
              <CardImage
243
                title={node.title}
244
                localFile={node.relationships.field_media_article_image.relationships.field_media_image.localFile}
245
                link={node.field_website.uri}
246
                metadata={false}
247
                key={i}
248
              />
249
            )
250
          } else {
251
            articleCount = articleCount + 2
252
            kcvvTvCount++
253
            return <KcvvTvCard node={node} teaser={true} key={i} />
254
          }
255
256
        default:
257
          return ``
258
      }
259
    })
260
  }
261
262
  combineAndSortPosts = (featuredPosts, kcvvTv) => {
263
    return [...featuredPosts.edges, ...kcvvTv.edges].sort((a, b) =>
264
      a.node.timestamp < b.node.timestamp ? 1 : b.node.timestamp < a.node.timestamp ? -1 : 0
265
    )
266
  }
267
268
  renderLayoutSidebar = () => {
269
    const { featuredPlayer } = this.props.data
270
    return (
271
      <>
272
        {/* TABLEBOOKER WIDGET */}
273
        {/* { this.renderTablebooker() } */}
274
275
        {/* A TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING*/}
276
        {this.renderATeamCalendarArticle()}
277
278
        {/* B TEAM OVERVIEW - SUMMARY OF MATCHES AND RANKING */}
279
        {this.renderBTeamCalendarArticle()}
280
281
        {/* YOUTH TEAMS OVERVIEW - SUMMARY OF UPCOMING MATCHES */}
282
        {this.renderYouthCalendarArticle()}
283
284
        {/* PLAYER OF THE WEEK ARTICLE IF ANY */}
285
        {/* {featuredPlayer && this.renderPlayerOfTheWeek(featuredPlayer)} */}
286
287
        {/* INFO ARTICLE WITH SOCIAL MEDIA LINKS */}
288
        {this.renderSocialMediaArticle()}
289
290
        {/* INFO ARTICLE WITH REQUEST FOR WEBSITE FEEDBACK */}
291
        {this.renderWebsiteFeedbackArticle()}
292
293
        {/* INFO ARTICLE WITH "TROOPER" CONTENT */}
294
        {this.renderTrooperArticle()}
295
296
        {/* INFO ARTICLE WITH "MYMAKRO" CONTENT */}
297
        {this.renderMakroArticle()}
298
      </>
299
    )
300
  }
301
302
  renderLayoutMain = () => {
303
    const { featuredPosts, kcvvTv } = this.props.data
304
    const posts = this.combineAndSortPosts(featuredPosts, kcvvTv)
305
306
    return (
307
      <>
308
        <UpcomingEvent />
309
310
        {posts && this.renderPosts(posts)}
311
      </>
312
    )
313
  }
314
315
  render() {
316
    return (
317
      <Layout>
318
        <SEO
319
          lang="nl-BE"
320
          title="Er is maar één plezante compagnie"
321
          description="Startpagina van stamnummer 00055: KCVV Elewijt."
322
        />
323
        {/* {this.renderExtraContentFooter(this.props.data.preseason)} */}
324
325
        <section className="grid-container site-content">
326
          {/* LIMITED-WIDTH CONTAINER WITH EXTRA (STICKY) CONTENT, IF ANY */}
327
328
          <div className="grid-x grid-margin-x">
329
            <section className="cell large-8 news_overview__wrapper">
330
              {/* MAIN CONTENT AREA */}
331
              {this.renderLayoutMain()}
332
            </section>
333
            <aside className="cell large-4">
334
              <section className="grid-x featured__matches grid-margin-x">
335
                {/* SIDEBAR CONTENT */}
336
                {this.renderLayoutSidebar()}
337
              </section>
338
            </aside>
339
          </div>
340
        </section>
341
342
        {/* FULL-WIDTH SLICK SLIDER WITH UPCOMING MATCHES */}
343
        {this.renderMatchSlider()}
344
      </Layout>
345
    )
346
  }
347
}
348
349
export const pageQuery = graphql`
350
  query {
351
    featuredPosts: allNodeArticle(
352
      filter: { status: { eq: true }, promote: { eq: true } }
353
      sort: { fields: changed, order: DESC }
354
      limit: 10
355
    ) {
356
      edges {
357
        node {
358
          id
359
          path {
360
            alias
361
          }
362
          created(formatString: "D/M/YYYY")
363
          changed(formatString: "D/M/YYYY")
364
          timestamp: changed(formatString: "x")
365
          title
366
          promote
367
          status
368
          field_featured
369
          body {
370
            value
371
            format
372
            processed
373
            summary
374
          }
375
          relationships {
376
            field_media_article_image {
377
              ...ArticleImage
378
            }
379
            field_tags {
380
              name
381
              path {
382
                alias
383
              }
384
            }
385
          }
386
          internal {
387
            type
388
          }
389
        }
390
      }
391
    }
392
    preseason: file(name: { eq: "preseason2020-2021" }) {
393
      ...KCVVFluid960
394
    }
395
    kcvvTv: allNodeKcvvTv(
396
      filter: { status: { eq: true }, promote: { eq: true } }
397
      sort: { fields: created, order: DESC }
398
      limit: 5
399
    ) {
400
      edges {
401
        node {
402
          id
403
          created(formatString: "D/M/YYYY")
404
          title
405
          timestamp: created(formatString: "x")
406
          relationships {
407
            field_media_article_image {
408
              ...ArticleImage
409
            }
410
          }
411
          field_website {
412
            uri
413
          }
414
          internal {
415
            type
416
          }
417
        }
418
      }
419
    }
420
    featuredPlayer: allNodePotw(sort: { fields: created, order: DESC }, filter: { status: { eq: true } }, limit: 1) {
421
      edges {
422
        node {
423
          relationships {
424
            field_player {
425
              field_firstname
426
              field_lastname
427
              field_shirtnumber
428
              field_position
429
              relationships {
430
                field_image {
431
                  localFile {
432
                    ...KCVVFixedPlayerTeaser
433
                  }
434
                }
435
              }
436
              path {
437
                alias
438
              }
439
            }
440
          }
441
        }
442
      }
443
    }
444
  }
445
`
446
447
export default IndexPage
448