Passed
Push — feature/typescript ( 7bdc89...dadf5f )
by Kevin Van
03:42
created

IndexPage.renderBTeamCalendarArticle   A

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

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