Passed
Pull Request — develop (#758)
by Kevin Van
08:31 queued 04:31
created

srcBU/pages/calendar.tsx   A

Complexity

Total Complexity 4
Complexity/F 0

Size

Lines of Code 116
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 4
eloc 90
mnd 4
bc 4
fnc 0
dl 0
loc 116
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { graphql, useStaticQuery } from "gatsby"
2
import QRCode from "qrcode.react"
3
import React, { FunctionComponent, useState } from "react"
4
import Select, { ValueType } from "react-select"
5
6
import SEO from "../components/seo"
7
import Layout from "../layouts/index"
8
import { TeamsListProps } from "../types/pages.types"
9
10
const CalendarForm = () => {
11
  const calendarUrl = `webcal://footbalisto.be/calendar`
12
  const [teamsSelected, setTeamSelected] = useState<string[]>([])
13
  const [sideSelected, setSideSelected] = useState<string>(``)
14
15
  const sides = [
16
    { value: `home`, label: `Alleen thuiswedstrijden` },
17
    { value: `away`, label: `Alleen uitwedstrijden` },
18
    { value: `all`, label: `Alle wedstrijden` },
19
  ]
20
  const { teamEdges }: TeamsListProps = useStaticQuery(graphql`
21
    query {
22
      teamEdges: allNodeTeam(filter: { field_vv_id: { ne: null } }) {
23
        edges {
24
          node {
25
            field_division_full
26
            field_vv_id
27
            title
28
          }
29
        }
30
      }
31
    }
32
  `)
33
34
  const teams = teamEdges.edges.map(({ node }) => ({
35
    value: node.field_vv_id,
36
    label: `${node.title} ${node.field_division_full !== null ? `(${node.field_division_full})` : ``}`,
37
  }))
38
39
  const handleSideChange = (inputValue: { value: string; label: string } | null) => {
40
    if (inputValue?.value) {
41
      setSideSelected(inputValue.value)
42
    } else {
43
      setSideSelected(`all`)
44
    }
45
  }
46
47
  const handleTeamsChange = (inputValue: ValueType<{ value: string; label: string }, boolean>) => {
48
    if (Array.isArray(inputValue)) {
49
      setTeamSelected(inputValue.map(({ value }) => value))
50
    } else {
51
      setTeamSelected([])
52
    }
53
  }
54
55
  return (
56
    <div>
57
      <form>
58
        <p>
59
          <label htmlFor="calendar__sides">Wedstrijden:</label>
60
        </p>
61
        <Select
62
          options={sides}
63
          name="sides"
64
          id="calendar__sides"
65
          className="select__input"
66
          onChange={handleSideChange}
67
        />
68
        <p>
69
          <label htmlFor="calendar__teams">Teams:</label>
70
        </p>
71
        <Select
72
          options={teams}
73
          isMulti
74
          name="teams"
75
          id="calendar__teams"
76
          className="select__input"
77
          onChange={handleTeamsChange}
78
        />
79
      </form>
80
      <p>
81
        Calendar:{` `}
82
        <a
83
          href={`${calendarUrl}?teams=${teamsSelected}&side=${sideSelected}`}
84
        >{`${calendarUrl}?teams=${teamsSelected}&side=${sideSelected}`}</a>
85
      </p>
86
      <p>
87
        <QRCode value={`${calendarUrl}?teams=${teamsSelected}&side=${sideSelected}`} />
88
      </p>
89
    </div>
90
  )
91
}
92
93
const CalendarPage = () => {
94
  return (
95
    <Layout>
96
      <SEO
97
        lang="nl-BE"
98
        title="Maak uw eigen kalender"
99
        description="Stel een eigen seizoenskalender samen met de teams die jou interesseren."
100
        path="calendar"
101
      />
102
103
      <div className={`limited-width_wrapper`}>
104
        <header>
105
          <h1>Stel je kalender samen</h1>
106
        </header>
107
        <main>
108
          <CalendarForm />
109
        </main>
110
      </div>
111
    </Layout>
112
  )
113
}
114
115
export default CalendarPage
116