Skip to content

Commit 973eb9a

Browse files
committed
Update verification page to dynamically create new routes based on src/data/pages/verification.js
1 parent 52b83c1 commit 973eb9a

File tree

9 files changed

+117
-110
lines changed

9 files changed

+117
-110
lines changed

gatsby-node.esm.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* Implement Gatsby's Node APIs in this file.
3+
*
4+
* See: https://www.gatsbyjs.org/docs/node-apis/
5+
*/
6+
7+
// You can delete this file if you're not using it
8+
9+
import path from 'path';
10+
// const data = require('./src/data/pages/verification.js');
11+
import { verifiedMembers } from './src/data/pages/verification.js';
12+
13+
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
14+
let rules = [
15+
{
16+
test: /\.mjs$/,
17+
include: /node_modules/,
18+
type: 'javascript/auto',
19+
},
20+
];
21+
if (stage === 'build-html') {
22+
rules.push({
23+
test: /openpgp/,
24+
use: loaders.null(),
25+
});
26+
}
27+
28+
actions.setWebpackConfig({
29+
resolve: {
30+
extensions: ['*', '.mjs', '.jsx', '.js', '.json'],
31+
},
32+
module: {
33+
rules: [...rules],
34+
},
35+
});
36+
};
37+
38+
exports.createPages = async ({ graphql, actions }) => {
39+
const { createPage } = actions;
40+
const verificationTemplate = path.resolve(`src/templates/verification.js`);
41+
42+
verifiedMembers.forEach(user => {
43+
const { substituteUserRoute, memberHandle } = user;
44+
createPage({
45+
path: `/${substituteUserRoute === undefined ? memberHandle : substituteUserRoute}`,
46+
component: verificationTemplate,
47+
context: {
48+
user,
49+
otherMembers: verifiedMembers.filter(member => member.memberHandle !== user.memberHandle),
50+
},
51+
});
52+
});
53+
};

gatsby-node.js

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,5 @@
66

77
// You can delete this file if you're not using it
88

9-
exports.onCreateWebpackConfig = ({ stage, loaders, actions }) => {
10-
let rules = [
11-
{
12-
test: /\.mjs$/,
13-
include: /node_modules/,
14-
type: 'javascript/auto',
15-
},
16-
];
17-
if(stage === 'build-html'){
18-
rules.push({
19-
test: /openpgp/,
20-
use: loaders.null(),
21-
});
22-
}
23-
24-
actions.setWebpackConfig({
25-
resolve: {
26-
extensions: ['*', '.mjs', '.jsx', '.js', '.json'],
27-
},
28-
module: {
29-
rules: [
30-
...rules,
31-
],
32-
},
33-
});
34-
};
9+
require = require('esm')(module);
10+
module.exports = require('./gatsby-node.esm.js');

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"css-loader": "^3.0.0",
2121
"dotenv": "^16.0.0",
2222
"eslint-plugin-import": "^2.18.2",
23+
"esm": "^3.2.25",
2324
"gatsby": "^2.31.1",
2425
"gatsby-image": "^2.2.1",
2526
"gatsby-plugin-anchor-links": "^1.1.1",

src/components/verification-page/index.js

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ import { ReactComponent as DownIcon } from '../../assets/svg/down.svg';
1717

1818
import './style.scss';
1919

20+
const parseComponents = components => {
21+
return components.map((component, index) => {
22+
if (component?.link) {
23+
return <a href={component.link}>{component.text}</a>;
24+
}
25+
});
26+
};
27+
2028
const MemberCard = ({ img, name, title, t }) => {
2129
return (
2230
<div className="VerificationPage__member-card">
@@ -96,8 +104,10 @@ const SafetyCardListContainer = ({ name, isAllowed, items }) => {
96104
};
97105

98106
const SafetyCard = ({ name, safetyItems, t }) => {
99-
const allowedItems = safetyItems.allowed.map(item => item?.components ? <Trans i18nKey={item.text} components={item.components} /> : t(item.text));
100-
const notAllowedItems = safetyItems.notAllowed.map(item => item?.components ? <Trans i18nKey={item.text} components={item.components} /> : t(item.text));
107+
const allowedItems = safetyItems.allowed.map(item =>
108+
item?.components ? <Trans i18nKey={item.text} components={parseComponents(item.components)} /> : t(item.text));
109+
const notAllowedItems = safetyItems.notAllowed.map(item =>
110+
item?.components ? <Trans i18nKey={item.text} components={parseComponents(item.components)} /> : t(item.text));
101111

102112
return (
103113
<div className="VerificationPage__safety-card">
@@ -111,7 +121,10 @@ const SafetyCard = ({ name, safetyItems, t }) => {
111121
</a>
112122
</div>
113123
<div className="VerificationPage__safety-card__subtitle">{t('verification.safety.subtitle')}</div>
114-
<a href="mailto:[email protected]" className="VerificationPage__safety-card__top__report-button VerificationPage__safety-card__top__report-button--mobile">
124+
<a
125+
href="mailto:[email protected]"
126+
className="VerificationPage__safety-card__top__report-button VerificationPage__safety-card__top__report-button--mobile"
127+
>
115128
<FlagIcon />
116129
<p className="VerificationPage__safety-card__top__report-button__text">
117130
{t('verification.safety.reportButton', { name })}
@@ -137,7 +150,10 @@ const OtherMembers = ({ otherMembers, t }) => {
137150
<div className="VerificationPage__other-members-card__subtitle">{t('verification.otherMembers.subtitle')}</div>
138151
<div className="VerificationPage__other-members-card__members">
139152
{membersToRender.map((member, index) => (
140-
<Link to={`/${member?.substituteUserRoute ? member.substituteUserRoute : member.memberHandle}`}>
153+
<Link
154+
key={`${member.memberHandle}-${index}`}
155+
to={`/${member?.substituteUserRoute ? member.substituteUserRoute : member.memberHandle}`}
156+
>
141157
<div className="VerificationPage__other-members-card__member">
142158
<img className="VerificationPage__other-members-card__member__icon" src={member.avatarUrl} alt="" />
143159
<div className="VerificationPage__other-members-card__member__name">@{member.memberHandle}</div>

src/data/pages/verification.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const verifiedMembers = [
1818
{ text: 'verification.safety.willNever.items.sendAnythingDangerous' },
1919
{
2020
text: 'verification.safety.willNever.items.askToVisitLinks',
21-
components: [<a href="https://www.joystream.org">Joystream.org</a>],
21+
components: [{ link: 'https://www.joystream.org', text: 'Joystream.org' }],
2222
},
2323
],
2424
allowed: [{ text: 'verification.safety.can.items.inviteToYpp' }],
@@ -42,7 +42,7 @@ export const verifiedMembers = [
4242
{ text: 'verification.safety.willNever.items.sendAnythingDangerous' },
4343
{
4444
text: 'verification.safety.willNever.items.askToVisitLinks',
45-
components: [<a href="https://www.joystream.org">Joystream.org</a>],
45+
components: [{ link: 'https://www.joystream.org', text: 'Joystream.org' }],
4646
},
4747
],
4848
allowed: [{ text: 'verification.safety.can.items.inviteToYpp' }],

src/pages/leet_joy/index.js

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/pages/vikan/index.js

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/templates/verification.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import React from 'react';
2+
import { graphql } from 'gatsby';
3+
import { useTranslation, useI18next } from 'gatsby-plugin-react-i18next';
4+
5+
import SiteMetadata from '../components/SiteMetadata';
6+
import Verification from '../components/verification-page';
7+
8+
const VerificationTemplate = ({ pageContext }) => {
9+
const { t } = useTranslation();
10+
const { language } = useI18next();
11+
12+
const { user, otherMembers } = pageContext;
13+
14+
return (
15+
<main>
16+
<SiteMetadata
17+
lang={language}
18+
title={t('verification.siteMetadata.title', { name: user.memberHandle })}
19+
description={t('verification.siteMetadata.description')}
20+
/>
21+
<Verification user={user} otherMembers={otherMembers} t={t} />
22+
</main>
23+
);
24+
};
25+
26+
export default VerificationTemplate;
27+
28+
export const query = graphql`
29+
query($language: String!) {
30+
locales: allLocale(filter: { language: { eq: $language } }) {
31+
...LanguageQueryFields
32+
}
33+
}
34+
`;

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7803,6 +7803,11 @@ eslint@^6.8.0:
78037803
text-table "^0.2.0"
78047804
v8-compile-cache "^2.0.3"
78057805

7806+
esm@^3.2.25:
7807+
version "3.2.25"
7808+
resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
7809+
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
7810+
78067811
espree@^6.1.2:
78077812
version "6.2.1"
78087813
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"

0 commit comments

Comments
 (0)