srcBU/components/KcvvTvOverview.tsx   A
last analyzed

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 121
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 83
mnd 2
bc 2
fnc 0
dl 0
loc 121
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { graphql, useStaticQuery } from "gatsby"
2
import { GatsbyImage, getImage } from "gatsby-plugin-image"
3
import React, { Fragment } from "react"
4
import { FunctionComponent } from "react"
5
6
import { KcvvTv } from "../types/Drupal"
7
import Icon from "./Icon"
8
import "./KcvvTvOverview.scss"
9
import { KcvvTvEdge, KcvvTvOverviewQueryData } from "./KcvvTvOverview.types"
10
11
const KcvvTvOverview: FunctionComponent = () => {
12
  const { videos }: KcvvTvOverviewQueryData = useStaticQuery(graphql`
13
    {
14
      videos: allNodeKcvvTv(
15
        filter: { status: { eq: true }, promote: { eq: true } }
16
        sort: { fields: created, order: DESC }
17
        limit: 5
18
      ) {
19
        edges {
20
          node {
21
            created(formatString: "D/M/YYYY")
22
            title
23
            timestamp: created(formatString: "x")
24
            relationships {
25
              field_media_article_image {
26
                ...ArticleImage
27
              }
28
            }
29
            field_website {
30
              uri
31
            }
32
          }
33
        }
34
      }
35
    }
36
  `)
37
38
  return (
39
    <section className="kcvvtv-wrapper">
40
      {videos && <KcvvTvFeatured node={videos.edges.slice(0, 1)[0].node} />}
41
      <div className="kcvvtv-list">
42
        {videos &&
43
          videos.edges.slice(1).map(({ node }, i) => {
44
            return <KcvvTvListItem key={i} node={node} />
45
          })}
46
      </div>
47
    </section>
48
  )
49
}
50
51
const KcvvTvFeatured: FunctionComponent<KcvvTvEdge> = ({ node }: KcvvTvEdge) => {
52
  const localFile =
53
    node.relationships.field_media_article_image.relationships.field_media_image.localFile.childImageSharp
54
      .gatsbyImageData
55
  const image = getImage(localFile)
56
57
  if (image) {
58
    return (
59
      <article className="kcvvtv-featured">
60
        <a
61
          href={node.field_website.uri}
62
          title={`${node.title}: Speel video af via Facebook`}
63
          target={`_blank`}
64
          rel={`noopener noreferrer`}
65
        >
66
          <GatsbyImage image={image} alt={node.title} />
67
          <div className="gradient gradient--70"></div>
68
          <header className="kcvvtv__heading">
69
            <span className="kcvvtv__play" />
70
            <h3 className="kcvvtv__title">
71
              <Icon icon={`fa-facebook-square`} /> {node.title}
72
            </h3>
73
          </header>
74
          <span className="kcvvtv__label">KCVV TV</span>
75
        </a>
76
      </article>
77
    )
78
  } else {
79
    return <></>
80
  }
81
}
82
83
const KcvvTvListItem: FunctionComponent<KcvvTvEdge> = ({ node }: KcvvTvEdge) => {
84
  const localFile =
85
    node.relationships.field_media_article_image.relationships.field_media_image.localFile.childImageSharp
86
      .gatsbyImageData
87
  const image = getImage(localFile)
88
  if (image) {
89
    return (
90
      <article className="kcvvtv-list-item">
91
        <a
92
          href={node.field_website.uri}
93
          title={`${node.title}: Speel video af via Facebook`}
94
          target={`_blank`}
95
          rel={`noopener noreferrer`}
96
        >
97
          <aside className="kcvvtv-teaser-image">
98
            <GatsbyImage image={image} alt={node.title} />
99
            <span className="kcvvtv__play" />
100
          </aside>
101
102
          <main className="kcvvtv-teaser-main">
103
            <span className="kcvvtv__label">KCVV TV</span>
104
            <h4 className="kcvvtv__title">
105
              <Icon icon={`fa-facebook-square`} /> {node.title}
106
            </h4>
107
108
            <span className="kcvvtv__date">
109
              <i className={`fa fa-clock-o`} aria-hidden="true"></i> {node.created}
110
            </span>
111
          </main>
112
        </a>
113
      </article>
114
    )
115
  } else {
116
    return <></>
117
  }
118
}
119
120
export default KcvvTvOverview
121