diff --git a/.env b/.env
index 7b8a211..7d910f1 100644
--- a/.env
+++ b/.env
@@ -1 +1 @@
-NODE_PATH=src/
+SKIP_PREFLIGHT_CHECK=true
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..bb0aefa
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+v12.1.0
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1 @@
+{}
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..ec2332e
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "baseUrl": "src"
+ }
+}
diff --git a/package.json b/package.json
index c0befa1..0fa7028 100644
--- a/package.json
+++ b/package.json
@@ -1,27 +1,39 @@
{
"name": "keihard",
- "version": "0.1.0",
+ "version": "1.0.1",
"homepage": "http://keihardroeien.nl",
"private": true,
"dependencies": {
- "i18next": "^11.3.2",
- "i18next-browser-languagedetector": "^2.2.0",
- "react": "^16.3.2",
- "react-dom": "^16.3.2",
- "react-i18next": "^7.6.1",
- "react-redux": "^5.0.7",
- "react-router": "^4.2.0",
- "react-router-redux": "^5.0.0-alpha.9",
- "react-scripts": "1.1.4",
- "redux": "^4.0.0",
- "redux-devtools-extension": "^2.13.2",
- "redux-saga": "^0.16.0",
- "styled-components": "^3.2.6"
+ "i18next": "^19.4.2",
+ "i18next-browser-languagedetector": "^4.1.1",
+ "react": "^16.13.1",
+ "react-dom": "^16.13.1",
+ "react-i18next": "^11.3.5",
+ "react-is": "^16.13.1",
+ "react-redux": "^7.2.0",
+ "react-scripts": "^3.4.1",
+ "redux": "^4.0.5",
+ "redux-devtools-extension": "^2.13.8",
+ "redux-saga": "^1.1.3",
+ "styled-components": "^5.1.0",
+ "typeface-passion-one": "^0.0.72"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
}
}
diff --git a/src/components/App.js b/src/components/App.js
index 172e8ff..d74845d 100644
--- a/src/components/App.js
+++ b/src/components/App.js
@@ -1,29 +1,27 @@
-import React, { Fragment } from 'react'
-import { Route, Switch } from 'react-router'
+import React from "react";
-import Translations from 'components/Translations'
-import Theme from 'components/Theme'
-import { Container } from 'components/lib'
-import SponsorModal from 'components/SponsorModal'
-import PhotoModal from 'components/PhotoModal'
-import HomePage from 'pages/home'
+import Translations from "components/Translations";
+import LocaleTracker from "components/LocaleTracker";
+import Theme from "components/Theme";
+import { Container } from "components/lib";
+import SponsorModal from "components/SponsorModal";
+import PhotoModal from "components/PhotoModal";
+import HomePage from "pages/home";
const App = () => (
-
-
+
+
-
-
-
+
- {[1,2,3,4,5,6].map(n =>
+ {[1, 2, 3, 4, 5, 6].map((n) => (
- )}
-
-
+ ))}
+
+
-)
+);
-export default App
+export default App;
diff --git a/src/components/Footer.js b/src/components/Footer.js
index 3368e8b..75e6e33 100644
--- a/src/components/Footer.js
+++ b/src/components/Footer.js
@@ -1,23 +1,23 @@
-import React from 'react'
-import styled from 'styled-components'
-import { translate, Trans } from 'react-i18next'
+import React from "react";
+import styled from "styled-components";
+import { withTranslation, Trans } from "react-i18next";
-import { Text, Link, Wrapper, Row, Button } from 'components/lib'
-import Waves from 'components/Waves'
-import Title from 'components/Title'
-import Sponsors from 'components/Sponsors'
+import { Text, Link, Wrapper, Row, Button } from "components/lib";
+import Waves from "components/Waves";
+import Title from "components/Title";
+import Sponsors from "components/Sponsors";
-const Footer = styled.footer`
+const FooterContainer = styled.footer`
position: relative;
padding: 4em 0;
- background:
- linear-gradient(#fff, #f2f2f2 2em);
-`
+ background: linear-gradient(#fff, #f2f2f2 2em);
+`;
const FooterWaves = styled(Waves)`
position: absolute;
- left: 0; top: 0;
+ left: 0;
+ top: 0;
right: 0;
width: 100%;
@@ -25,38 +25,63 @@ const FooterWaves = styled(Waves)`
transform: scale(1, -1);
- fill: rgba(255, 255, 255, .4);
-`
+ fill: rgba(255, 255, 255, 0.4);
+`;
const Languages = styled.div`
text-align: center;
-`
+`;
-const Language = Button.extend`
- margin: 0 .25em;
-`
+const Language = styled(Button)`
+ margin: 0 0.25em;
+`;
-export default translate('page')(({t, i18n}) => (
-
-))
+
+);
+
+export default withTranslation()(Footer);
diff --git a/src/components/Header.js b/src/components/Header.js
index 6cb72eb..a40aa4d 100644
--- a/src/components/Header.js
+++ b/src/components/Header.js
@@ -1,40 +1,41 @@
-import React from 'react'
-import styled from 'styled-components'
+import React from "react";
+import styled from "styled-components";
-import { Link } from 'components/lib'
-import Waves from 'components/Waves'
+import { Link } from "components/lib";
+import Waves from "components/Waves";
-import headerBg from 'assets/header.jpg'
-import kika from 'assets/kika.png'
+import headerBg from "assets/header.jpg";
+import kika from "assets/kika.png";
const Header = styled.header`
position: relative;
height: 40vmin;
- background-color: ${props => props.theme.colors.primary};
- background:
- linear-gradient(90deg, transparent 75%, rgba(255, 255, 255, .1)),
+ background-color: ${(props) => props.theme.colors.primary};
+ background: linear-gradient(90deg, transparent 75%, rgba(255, 255, 255, 0.1)),
linear-gradient(transparent 80%, #fff),
url(${headerBg}) no-repeat left 30% top 50% / cover;
-`
+`;
const KiKaImage = styled.img`
position: absolute;
- right: 2em; top: 2em;
+ right: 2em;
+ top: 2em;
height: 50%;
-`
+`;
const HeaderWaves = styled(Waves)`
position: absolute;
left: 0;
- right: 0; bottom: 0;
+ right: 0;
+ bottom: 0;
width: 100%;
height: 20%;
- fill: rgba(255, 255, 255, .8);
-`
+ fill: rgba(255, 255, 255, 0.8);
+`;
export default () => (
@@ -43,4 +44,4 @@ export default () => (
-)
+);
diff --git a/src/components/LocaleTracker.js b/src/components/LocaleTracker.js
new file mode 100644
index 0000000..03b1073
--- /dev/null
+++ b/src/components/LocaleTracker.js
@@ -0,0 +1,8 @@
+import { useTranslation } from "react-i18next";
+
+const LocaleTracker = ({ children }) => {
+ useTranslation();
+ return children;
+};
+
+export default LocaleTracker;
diff --git a/src/components/PaymentMethod.js b/src/components/PaymentMethod.js
index 629e31d..a122719 100644
--- a/src/components/PaymentMethod.js
+++ b/src/components/PaymentMethod.js
@@ -1,13 +1,13 @@
-import React from 'react'
-import { connect } from 'react-redux'
-import styled, { css } from 'styled-components'
+import React from "react";
+import { connect } from "react-redux";
+import styled, { css } from "styled-components";
-import * as Pledge from 'ducks/pledge'
+import * as Pledge from "ducks/pledge";
-import { Image } from 'components/lib'
+import { Image } from "components/lib";
-import paypal from 'assets/icons/paypal.png'
-import iban from 'assets/icons/iban.png'
+import paypal from "assets/icons/paypal.png";
+import iban from "assets/icons/iban.png";
const Method = styled.div`
cursor: pointer;
@@ -17,52 +17,53 @@ const Method = styled.div`
display: inline-block;
width: 3em;
height: 3.5em;
- padding: .5em;
- margin: .5em .5em 0 0;
- border-radius: ${props => props.theme.border.radius};
+ padding: 0.5em;
+ margin: 0.5em 0.5em 0 0;
+ border-radius: ${(props) => props.theme.border.radius};
- ${props => props.selected && css`
- background-color: rgba(0, 0, 0, .1);
- `}
-`
+ ${(props) =>
+ props.selected &&
+ css`
+ background-color: rgba(0, 0, 0, 0.1);
+ `}
+`;
-const CenterImage = Image.extend`
+const CenterImage = styled(Image)`
position: absolute;
- left: .5em; top: .5em;
- right: .5em; bottom: .5em;
+ left: 0.5em;
+ top: 0.5em;
+ right: 0.5em;
+ bottom: 0.5em;
max-width: 2em;
max-height: 2.5em;
margin: auto;
-`
+`;
const PaymentMethod = ({ image, method, selected, onClick }) => (
-)
+);
const getImage = (method) => {
switch (method) {
- case 'PayPal':
- return paypal
- case 'Bankoverschrijving':
- return iban
+ case "PayPal":
+ return paypal;
+ case "Bankoverschrijving":
+ return iban;
default:
- return paypal
+ return paypal;
}
-}
+};
const mapStateToProps = (state, props) => ({
image: getImage(props.method),
- selected: state.pledge.payment_method === props.method
-})
+ selected: state.pledge.payment_method === props.method,
+});
const mapDispatchToProps = (dispatch, props) => ({
- onClick: () => dispatch(Pledge.update('payment_method', props.method))
-})
+ onClick: () => dispatch(Pledge.update("payment_method", props.method)),
+});
-export default connect(
- mapStateToProps,
- mapDispatchToProps
-)(PaymentMethod)
+export default connect(mapStateToProps, mapDispatchToProps)(PaymentMethod);
diff --git a/src/components/PhotoModal.js b/src/components/PhotoModal.js
index 013f07a..549a080 100644
--- a/src/components/PhotoModal.js
+++ b/src/components/PhotoModal.js
@@ -1,37 +1,44 @@
-import React from 'react'
-import styled from 'styled-components'
+import React from "react";
+import styled from "styled-components";
-import { Modal } from 'components/lib'
+import { Modal } from "components/lib";
-import photo1 from 'assets/photo1.jpg'
-import photo2 from 'assets/photo2.jpg'
-import photo3 from 'assets/photo3.jpg'
-import photo4 from 'assets/photo4.jpg'
-import photo5 from 'assets/photo5.jpg'
-import photo6 from 'assets/photo6.jpg'
+import photo1 from "assets/photo1.jpg";
+import photo2 from "assets/photo2.jpg";
+import photo3 from "assets/photo3.jpg";
+import photo4 from "assets/photo4.jpg";
+import photo5 from "assets/photo5.jpg";
+import photo6 from "assets/photo6.jpg";
const Center = styled.div`
text-align: center;
-`
+`;
const Photo = styled.img`
max-width: calc(100vw - 4em);
max-height: calc(100vh - 4.5em);
margin: -2em;
- border-radius: ${props => props.theme.border.radius};
-`
+ border-radius: ${(props) => props.theme.border.radius};
+`;
-const getSrc = n => {
+const getSrc = (n) => {
switch (n) {
- case 1: return photo1
- case 2: return photo2
- case 3: return photo3
- case 4: return photo4
- case 5: return photo5
- case 6: return photo6
- default: return null
+ case 1:
+ return photo1;
+ case 2:
+ return photo2;
+ case 3:
+ return photo3;
+ case 4:
+ return photo4;
+ case 5:
+ return photo5;
+ case 6:
+ return photo6;
+ default:
+ return null;
}
-}
+};
const PhotoModal = ({ n }) => (
@@ -39,6 +46,6 @@ const PhotoModal = ({ n }) => (
-)
+);
-export default PhotoModal
+export default PhotoModal;
diff --git a/src/components/Photos.js b/src/components/Photos.js
index 802b3a9..241c8a0 100644
--- a/src/components/Photos.js
+++ b/src/components/Photos.js
@@ -1,53 +1,71 @@
-import React from 'react'
-import styled from 'styled-components'
-import { connect } from 'react-redux'
-import { opacity } from 'style-utils'
+import React from "react";
+import styled from "styled-components";
+import { connect } from "react-redux";
+import { opacity } from "style-utils";
-import * as Modals from 'ducks/modals'
+import * as Modals from "ducks/modals";
-import { Text, Row, Column } from 'components/lib'
-import SubTitle from 'components/SubTitle'
+import { Text, Row, Column } from "components/lib";
+import SubTitle from "components/SubTitle";
-import photo1 from 'assets/photo1.jpg'
-import photo2 from 'assets/photo2.jpg'
-import photo3 from 'assets/photo3.jpg'
-import photo4 from 'assets/photo4.jpg'
-import photo5 from 'assets/photo5.jpg'
-import photo6 from 'assets/photo6.jpg'
+import photo1 from "assets/photo1.jpg";
+import photo2 from "assets/photo2.jpg";
+import photo3 from "assets/photo3.jpg";
+import photo4 from "assets/photo4.jpg";
+import photo5 from "assets/photo5.jpg";
+import photo6 from "assets/photo6.jpg";
const StyledPhoto = styled.div`
cursor: pointer;
padding-top: 75%;
margin-bottom: 1em;
- border-radius: ${props => props.theme.border.radius};
+ border-radius: ${(props) => props.theme.border.radius};
- box-shadow: 0 .1em .3em ${props => opacity(props.theme.colors.primary, .2)};
+ box-shadow: 0 0.1em 0.3em
+ ${(props) => opacity(props.theme.colors.primary, 0.2)};
- background: url(${props => props.src}) no-repeat center / cover;
-`
+ background: url(${(props) => props.src}) no-repeat center / cover;
+`;
const mapDispatchToProps = (dispatch, { n }) => ({
- innerRef: el => dispatch(Modals.setOrigin(`photo${n}`, el)),
- onClick: () => dispatch(Modals.open(`photo${n}`))
-})
+ innerRef: (el) => dispatch(Modals.setOrigin(`photo${n}`, el)),
+ onClick: () => dispatch(Modals.open(`photo${n}`)),
+});
-const Photo = connect(
- () => ({}),
- mapDispatchToProps,
-)(StyledPhoto)
+const Photo = connect(() => ({}), mapDispatchToProps)(StyledPhoto);
export default () => (
Post mortem
- In februari 2018 stapten we voor het eerst de roeiboot in bij studenten roeivereniging Proteus te Delft. Een plek waar we de maanden daarna nog veel uren zouden doorbrengen op de roeimachines en in de boten. Na maanden training op 6 juni was het dan zover, de Ringvaart. Deze dag hebben wij: Daniël, Leon, Sigur, Wouter en natuurlijk onze stuur Suzanne, de 100 kilometers geroeid in 10 uur en 8 minuten. De dag is nu voorbij, maar gelukkig hebben we de foto's nog.
+
+ In februari 2018 stapten we voor het eerst de roeiboot in bij studenten
+ roeivereniging Proteus te Delft. Een plek waar we de maanden daarna nog
+ veel uren zouden doorbrengen op de roeimachines en in de boten. Na
+ maanden training op 6 juni was het dan zover, de Ringvaart. Deze dag
+ hebben wij: Daniël, Leon, Sigur, Wouter en natuurlijk onze stuur
+ Suzanne, de 100 kilometers geroeid in 10 uur en 8 minuten. De dag is nu
+ voorbij, maar gelukkig hebben we de foto's nog.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-)
+);
diff --git a/src/components/ShareForm.js b/src/components/ShareForm.js
index 59dd340..ec37f7b 100644
--- a/src/components/ShareForm.js
+++ b/src/components/ShareForm.js
@@ -1,17 +1,17 @@
-import React from 'react'
-import styled from 'styled-components'
+import React from "react";
+import styled from "styled-components";
-import { opacity } from 'style-utils'
-import { Column } from 'components/lib'
+import { opacity } from "style-utils";
+import { Column } from "components/lib";
const ShareForm = styled.div`
margin: 1em 0 4em;
text-align: center;
-`
+`;
const Share = styled.a.attrs({
- target: '_blank'
+ target: "_blank",
})`
display: inline-block;
width: 1.5em;
@@ -21,17 +21,18 @@ const Share = styled.a.attrs({
color: transparent;
svg {
- fill: ${props => opacity(props.theme.colors.text, .2)};
+ fill: ${(props) => opacity(props.theme.colors.text, 0.2)};
}
&:hover svg {
- fill: ${props => opacity(props.theme.colors.text, props.theme.opacity.text)};
+ fill: ${(props) =>
+ opacity(props.theme.colors.text, props.theme.opacity.text)};
}
-`
+`;
-const url = encodeURIComponent('http://keihardroeien.nl')
-const twitterText = 'Wij gaan Keihard roeien voor KiKa.'
-const emailBody = `Wij gaan Keihard roeien voor KiKa: ${url}`
+const url = encodeURIComponent("http://keihardroeien.nl");
+const twitterText = "Wij gaan Keihard roeien voor KiKa.";
+const emailBody = `Wij gaan Keihard roeien voor KiKa: ${url}`;
export default () => (
@@ -39,25 +40,36 @@ export default () => (
-
-
+
+
-)
+);
diff --git a/src/components/SponsorForm.js b/src/components/SponsorForm.js
index a65e7a7..f975e6c 100644
--- a/src/components/SponsorForm.js
+++ b/src/components/SponsorForm.js
@@ -1,14 +1,14 @@
-import React from 'react'
-import { translate } from 'react-i18next'
-import { connect } from 'react-redux'
-import styled from 'styled-components'
+import React from "react";
+import { withTranslation } from "react-i18next";
+import { connect } from "react-redux";
+import styled from "styled-components";
-import { opacity, media } from 'style-utils'
-import { Column, Text, Button } from 'components/lib'
+import { opacity, media } from "style-utils";
+import { Column, Text, Button } from "components/lib";
-import * as Modals from 'ducks/modals'
+import * as Modals from "ducks/modals";
-import Waves from 'components/Waves'
+import Waves from "components/Waves";
const Paper = styled.div`
position: relative;
@@ -19,38 +19,51 @@ const Paper = styled.div`
margin: 3em 0 0;
${media.small`margin: 0 -1em;`}
- border: 1px solid ${props => opacity(props.theme.colors.primary, .1)};
- border-radius: ${props => props.theme.border.radius};
- box-shadow: 0 .1em .3em ${props => opacity(props.theme.colors.primary, .2)};
-`
+ border: 1px solid ${(props) => opacity(props.theme.colors.primary, 0.1)};
+ border-radius: ${(props) => props.theme.border.radius};
+ box-shadow: 0 .1em .3em ${(props) =>
+ opacity(props.theme.colors.primary, 0.2)};
+`;
-const TagValue = Text.extend`
+const TagValue = styled(Text)`
font-size: 2em;
margin: 0;
-`
+`;
-const TagLabel = Text.extend`
- font-size: .75em;
+const TagLabel = styled(Text)`
+ font-size: 0.75em;
margin-top: 0;
-`
+`;
const FormWaves = styled(Waves)`
position: absolute;
left: 0;
- right: 0; bottom: 0;
+ right: 0;
+ bottom: 0;
z-index: -1;
width: 100%;
height: 5em;
- fill: ${props => opacity(props.theme.colors.accent, .5)};
-`
+ fill: ${(props) => opacity(props.theme.colors.accent, 0.5)};
+`;
-const SponsorForm = ({ t, amount, shirtAmount, count, days, onRefLoad, onButtonClick }) => (
+const SponsorForm = ({
+ t,
+ amount,
+ shirtAmount,
+ count,
+ days,
+ onRefLoad,
+ onButtonClick,
+}) => (
€{amount},-
- {t`donated`}†
+
+ {t`donated`}
+ †
+
{count}
@@ -61,37 +74,45 @@ const SponsorForm = ({ t, amount, shirtAmount, count, days, onRefLoad, onButtonC
{t`days`}
- †{t("remark", { kikaAmount: amount - shirtAmount, shirtAmount })}
+
+ †
+
+ {t("remark", { kikaAmount: amount - shirtAmount, shirtAmount })}
+
+
-
+
-)
+);
const mapStateToProps = (state, props) => ({
- amount: state.sponsors
- .map(s => s.amount)
- .reduce((acc, x) => acc + x, 0),
+ amount: state.sponsors.map((s) => s.amount).reduce((acc, x) => acc + x, 0),
shirtAmount: state.sponsors
- .filter(s => s.who === 'both')
- .map(s => s.amount * 0.2)
+ .filter((s) => s.who === "both")
+ .map((s) => s.amount * 0.2)
.reduce((acc, x) => Math.ceil(Math.min(acc + x, 120)), 0),
count: state.sponsors.length,
- days: Math.max(0, Math.ceil(((new Date(2018, 5, 6)).getTime() - Date.now()) / (1000 * 60 * 60 * 24))),
-})
+ days: Math.max(
+ 0,
+ Math.ceil(
+ (new Date(2018, 5, 6).getTime() - Date.now()) / (1000 * 60 * 60 * 24)
+ )
+ ),
+});
const mapDispatchToProps = (dispatch, props) => ({
- onRefLoad: (el) => dispatch(Modals.setOrigin('sponsor', el)),
- onButtonClick: () => dispatch(Modals.open('sponsor'))
-})
+ onRefLoad: (el) => dispatch(Modals.setOrigin("sponsor", el)),
+ onButtonClick: () => dispatch(Modals.open("sponsor")),
+});
-export default translate('form')(
- connect(
- mapStateToProps,
- mapDispatchToProps,
- )(SponsorForm)
-)
+export default withTranslation("form")(
+ connect(mapStateToProps, mapDispatchToProps)(SponsorForm)
+);
diff --git a/src/components/SponsorModal.js b/src/components/SponsorModal.js
index 5f94c90..034f83f 100644
--- a/src/components/SponsorModal.js
+++ b/src/components/SponsorModal.js
@@ -1,85 +1,138 @@
-import React from 'react'
-import { translate, Trans } from 'react-i18next'
-import { connect } from 'react-redux'
-import styled from 'styled-components'
+import React from "react";
+import { withTranslation, Trans } from "react-i18next";
+import { connect } from "react-redux";
+import styled from "styled-components";
-import * as Pledge from 'ducks/pledge'
+import * as Pledge from "ducks/pledge";
-import { Title, Text, Form, InputGroup, Input, Button, Modal } from 'components/lib'
-import PaymentMethod from 'components/PaymentMethod'
+import {
+ Title,
+ Text,
+ Form,
+ InputGroup,
+ Input,
+ Button,
+ Modal,
+} from "components/lib";
+import PaymentMethod from "components/PaymentMethod";
-const H1 = Title(1).extend`
+const H1 = styled(Title(1))`
strong {
- color: ${props => props.theme.colors.primary};
+ color: ${(props) => props.theme.colors.primary};
}
-`
+`;
const Kbd = styled.kbd`
- padding: .125em .25em;
- border-radius: ${props => props.theme.border.radius};
+ padding: 0.125em 0.25em;
+ border-radius: ${(props) => props.theme.border.radius};
- background-color: rgba(0, 0, 0, .05);
-`
+ background-color: rgba(0, 0, 0, 0.05);
+`;
-const PaymentMethods = () => (
)
+const PaymentMethods = () => (
+
+);
const SponsorModal = ({ t, values, update, updateModified, submit }) => (
- Thanks
+
+ Thanks
+
- {values.success
- ? (values.payment_method === 'Bankoverschrijving'
- ?
- {t('transfer', { amount: values.amount })} NL48 RABO 0118 539 108 {t`to`} Wouter Raateland {t`stating`} Sponsoring {values.name} {t`confirm`}.
-
- : {t`success`} 🎉)
- :
- }
+ {values.success ? (
+ values.payment_method === "Bankoverschrijving" ? (
+
+ {t("transfer", { amount: values.amount })}{" "}
+ NL48 RABO 0118 539 108 {t`to`} Wouter Raateland{" "}
+ {t`stating`} Sponsoring {values.name} {t`confirm`}.
+
+ ) : (
+
+ {t`success`}{" "}
+
+ 🎉
+
+
+ )
+ ) : (
+
+ )}
-)
+);
const mapStateToProps = (state) => ({
values: state.pledge,
-})
+});
const mapDispatchToProps = (dispatch) => ({
- update: field => value => dispatch(Pledge.update(field, value)),
- updateModified: field => value => dispatch(Pledge.update(field, parseInt(value.substring(1) || 0, 10))),
- submit: () => dispatch(Pledge.submit())
-})
+ update: (field) => (value) => dispatch(Pledge.update(field, value)),
+ updateModified: (field) => (value) =>
+ dispatch(Pledge.update(field, parseInt(value.substring(1) || 0, 10))),
+ submit: () => dispatch(Pledge.submit()),
+});
-export default translate('modal')(
- connect(
- mapStateToProps,
- mapDispatchToProps
- )(SponsorModal)
-)
+export default withTranslation("modal")(
+ connect(mapStateToProps, mapDispatchToProps)(SponsorModal)
+);
diff --git a/src/components/Sponsors.js b/src/components/Sponsors.js
index 59ab94b..5432df5 100644
--- a/src/components/Sponsors.js
+++ b/src/components/Sponsors.js
@@ -1,13 +1,13 @@
-import React from 'react'
-import styled from 'styled-components'
+import React from "react";
+import styled from "styled-components";
-import { Text } from 'components/lib'
+import { Text } from "components/lib";
-import sponsors from 'assets/sponsors.json'
+import sponsors from "assets/sponsors.json";
-const Sponsors = Text.extend`
+const Sponsors = styled(Text)`
margin: 2em 0;
-`
+`;
// const Sponsor = styled.div`
// display: inline-block;
@@ -24,16 +24,18 @@ const Sponsors = Text.extend`
const Sponsor = styled.strong`
display: inline-block;
margin-right: 1.5em;
- margin-bottom: .5em;
-`
+ margin-bottom: 0.5em;
+`;
export default () => (
- {sponsors.map(({ name }, i) =>
- {name}
+ {sponsors.map(
+ ({ name }, i) => (
+ {name}
+ )
//
//
//
)}
-)
+);
diff --git a/src/components/SubTitle.js b/src/components/SubTitle.js
index 66c7dff..5cae675 100644
--- a/src/components/SubTitle.js
+++ b/src/components/SubTitle.js
@@ -1,9 +1,10 @@
-import { media } from 'style-utils'
-import { Title } from 'components/lib'
+import styled from "styled-components";
+import { media } from "style-utils";
+import { Title } from "components/lib";
-export default Title(2).extend`
- margin: 1em 0 .5em;
+export default styled(Title(2))`
+ margin: 1em 0 0.5em;
font-size: 2.5em;
${media.small`font-size: 1.75em;`}
-`
+`;
diff --git a/src/components/Theme.js b/src/components/Theme.js
index 41388d9..e6474e7 100644
--- a/src/components/Theme.js
+++ b/src/components/Theme.js
@@ -1,38 +1,37 @@
-import React from 'react'
-import { ThemeProvider, injectGlobal } from 'styled-components'
+import "typeface-passion-one";
+import React from "react";
+import { ThemeProvider, createGlobalStyle } from "styled-components";
const theme = {
fonts: {
- main: 'roboto, sans-serif',
+ main: "roboto, sans-serif",
titles: `'Passion One', cursive`,
},
colors: {
- text: '#000',
- background: '#fff',
- primary: '#52006b',
- accent: '#e87511',
- success: '#4caf50',
- warning: '#ffc107',
- error: '#f44336',
+ text: "#000",
+ background: "#fff",
+ primary: "#52006b",
+ accent: "#e87511",
+ success: "#4caf50",
+ warning: "#ffc107",
+ error: "#f44336",
},
opacity: {
titles: 0.2,
text: 0.55,
},
border: {
- width: '.125em',
- radius: '.25em',
+ width: ".125em",
+ radius: ".25em",
},
columns: {
count: 12,
- gap: '.5em',
+ gap: ".5em",
},
lineHeight: 1.5,
-}
-
-injectGlobal`
- @import url('https://fonts.googleapis.com/css?family=Passion+One:400,700');
+};
+const GlobalStyle = createGlobalStyle`
*, *::before, *::after {
box-sizing: border-box;
}
@@ -46,7 +45,7 @@ injectGlobal`
padding: 0;
margin: 0;
- font-family: ${theme.fonts.main};
+ font-family: ${(p) => p.theme.fonts.main};
}
input, textarea, select, button {
@@ -54,12 +53,15 @@ injectGlobal`
}
h1, h2, h3, h4, h5, h6 {
- font-family: ${theme.fonts.titles}
+ font-family: ${(p) => p.theme.fonts.titles}
}
-`
+`;
-const Theme = (props) => (
-
-)
+const Theme = ({ children, ...props }) => (
+
+
+ {children}
+
+);
-export default Theme
+export default Theme;
diff --git a/src/components/Title.js b/src/components/Title.js
index 8981c8a..41cbed5 100644
--- a/src/components/Title.js
+++ b/src/components/Title.js
@@ -1,7 +1,8 @@
-import { media } from 'style-utils'
-import { Title } from 'components/lib'
+import styled from "styled-components";
+import { media } from "style-utils";
+import { Title } from "components/lib";
-export default Title(1).extend`
+export default styled(Title(1))`
margin-bottom: 0;
font-size: 4em;
@@ -9,6 +10,6 @@ export default Title(1).extend`
font-weight: 900;
strong {
- color: ${props => props.theme.colors.primary};
+ color: ${(props) => props.theme.colors.primary};
}
-`
+`;
diff --git a/src/components/Translations.js b/src/components/Translations.js
index 1940a3f..8816f80 100644
--- a/src/components/Translations.js
+++ b/src/components/Translations.js
@@ -1,29 +1,25 @@
-import React from 'react'
-import i18n from 'i18next'
-import { I18nextProvider } from 'react-i18next'
-import LanguageDetector from 'i18next-browser-languagedetector'
+import React from "react";
+import i18n from "i18next";
+import { I18nextProvider } from "react-i18next";
+import LanguageDetector from "i18next-browser-languagedetector";
-import en from 'lang/en.json'
-import nl from 'lang/nl.json'
+import en from "lang/en.json";
+import nl from "lang/nl.json";
-i18n
- .use(LanguageDetector)
- .init({
- fallbackLng: 'nl',
- debug: false,
+i18n.use(LanguageDetector).init({
+ fallbackLng: "nl",
+ debug: false,
- react: {
- wait: false,
- bindI18n: 'languageChanged loaded',
- bindStore: 'added removed',
- nsMode: 'default'
- },
+ react: {
+ wait: false,
+ bindI18n: "languageChanged loaded",
+ bindStore: "added removed",
+ nsMode: "default",
+ },
- resources: { en, nl }
- })
+ resources: { en, nl },
+});
-const Translations = (props) => (
-
-)
+const Translations = (props) => ;
-export default Translations
+export default Translations;
diff --git a/src/components/Waves.js b/src/components/Waves.js
index 0d7a512..d4a59e9 100644
--- a/src/components/Waves.js
+++ b/src/components/Waves.js
@@ -1,13 +1,13 @@
-import React from 'react'
+import React from "react";
-const Waves = ({ part=1, ...props }) => (
-