Skip to content

Commit 7213029

Browse files
committed
remove react helmet and create utily function
1 parent 8217b16 commit 7213029

File tree

4 files changed

+45
-23
lines changed

4 files changed

+45
-23
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
"@testing-library/jest-dom": "^5.17.0",
4444
"@testing-library/react": "^13.4.0",
4545
"jest": "^29.7.0",
46-
"jsonfile": "^6.1.0",
47-
"react-helmet": "^6.1.0"
46+
"jsonfile": "^6.1.0"
4847
}
4948
}

src/App.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const App = () => {
1919
useEffect(() => {
2020
setEpisodes(episodesData);
2121
}, []);
22-
22+
2323
return (
2424
<Router>
2525
<div className="app">

src/components/EpisodeDetail.js

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
22
import '../css/EpisodeDetail.css'; // Import the CSS file for styling
33
import panelistsData from '../content/panel.json'; // Import the JSON file
44
import { createURL } from '../utils';
5-
import { Helmet } from 'react-helmet';
5+
import { setMetaTags } from '../setMetaTags';
66

77
const EpisodeDetail = ({ episode }) => {
88
const [transcript, setTranscript] = useState('');
@@ -12,6 +12,13 @@ const EpisodeDetail = ({ episode }) => {
1212
import(`../transcripts/${episode.episode}.js`)
1313
.then((module) => setTranscript(module.default))
1414
.catch((error) => console.error('Error loading transcript:', error));
15+
16+
setMetaTags({
17+
title: episode.title,
18+
description: episode.description,
19+
image: `https://frontendhappyhour.com/public/img/episodes/friendly-preview/${createURL(episode.title)}.jpeg`,
20+
url: `https://frontendhappyhour.com/episodes/${createURL(episode.title)}`
21+
});
1522
}
1623
}, [episode]);
1724

@@ -25,7 +32,7 @@ const EpisodeDetail = ({ episode }) => {
2532
episode.panel.includes(panelist.name)
2633
);
2734

28-
// Function to get guest image URL
35+
// Function to get guest image URL
2936
// if the guest has a twitter account the image is saved as their username .jpg
3037
// if the guest doesn't have twitter the image is saved as their first-lastname.jpg lowercase
3138
const getGuestImageUrl = (guest) => {
@@ -37,21 +44,6 @@ const EpisodeDetail = ({ episode }) => {
3744

3845
return (
3946
<div className="episode-detail">
40-
<Helmet>
41-
<meta name="viewport" content="width=device-width" />
42-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
43-
<link rel="alternate" type="application/rss+xml" href="https://feeds.soundcloud.com/users/soundcloud:users:206137365/sounds.rss" />
44-
<meta property="og:image" content={`https://frontendhappyhour.com/public/img/episodes/friendly-preview/${createURL(episode.title)}.jpeg`} />
45-
<meta property="og:description" content={`${episode.description}`} />
46-
<meta property="og:title" content={`${episode.title} - Front End Happy Hour`} />
47-
<meta name="twitter:description" content={`${episode.description}`} />
48-
<meta property="twitter:title" content={`${episode.title} - Front End Happy Hour`} />
49-
<meta name="twitter:card" content="summary_large_image" />
50-
<meta name="twitter:site" content="@frontendhappyhour" />
51-
<meta name="twitter:creator" content="@frontendhappyhour" />
52-
<link rel="icon" href="https://frontendhappyhour.com/favicon.ico" type="image/x-icon" />
53-
<link rel="canonical" href={`https://frontendhappyhour.com/episodes/${createURL(episode.title)}`} />
54-
</Helmet>
5547
<h1>{episode.title}</h1>
5648
<p className="episode-published">Published on: {episode.published}</p>
5749
<p>{episode.description}</p>
@@ -108,9 +100,7 @@ const EpisodeDetail = ({ episode }) => {
108100
<li key={index} className="guest">
109101
<a href={guest.twitter ? `https://twitter.com/${guest.twitter}` : '#'} target="_blank" rel="noopener noreferrer">
110102
<img src={getGuestImageUrl(guest)} alt={guest.name} className="guest-image" />
111-
<p>
112-
{guest.name}
113-
</p>
103+
<p>{guest.name}</p>
114104
</a>
115105
</li>
116106
))}

src/setMetaTags.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// src/setMetaTags.js
2+
export const setMetaTags = ({ title, description, image, url }) => {
3+
document.title = title;
4+
5+
const metaTags = [
6+
{ name: 'description', content: description },
7+
{ property: 'og:title', content: title },
8+
{ property: 'og:description', content: description },
9+
{ property: 'og:image', content: image },
10+
{ property: 'og:url', content: url },
11+
{ name: 'twitter:card', content: 'summary_large_image' },
12+
{ name: 'twitter:title', content: title },
13+
{ name: 'twitter:description', content: description },
14+
{ name: 'twitter:image', content: image },
15+
];
16+
17+
metaTags.forEach(tag => {
18+
let element = document.querySelector(`meta[name="${tag.name}"], meta[property="${tag.property}"]`);
19+
if (element) {
20+
element.content = tag.content;
21+
} else {
22+
element = document.createElement('meta');
23+
if (tag.name) {
24+
element.name = tag.name;
25+
}
26+
if (tag.property) {
27+
element.setAttribute('property', tag.property);
28+
}
29+
element.content = tag.content;
30+
document.head.appendChild(element);
31+
}
32+
});
33+
};

0 commit comments

Comments
 (0)