Passed
Push — feature/tablebooker ( baab30...423766 )
by Kevin Van
04:32
created

IndexPage.renderSocialMediaArticle   B

Complexity

Conditions 1

Size

Total Lines 40
Code Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

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