From 659d7693f8fe3caa37a0cfe3aad910fa1594deb2 Mon Sep 17 00:00:00 2001 From: Arnaud Lier Date: Sun, 6 Mar 2022 20:30:43 +0100 Subject: [PATCH] feat: subreddit card --- api/services/subreddit/[query].ts | 31 +++++++++++++++++++ public/locales/de/translation.json | 1 + public/locales/en/translation.json | 1 + public/locales/fr/translation.json | 1 + public/locales/ja/translation.json | 1 + public/locales/pt-BR/translation.json | 1 + public/locales/zh-Hans/translation.json | 1 + public/locales/zh-Hant/translation.json | 1 + src/components/cards/index.tsx | 2 ++ src/components/cards/providers/Subreddit.tsx | 32 ++++++++++++++++++++ 10 files changed, 72 insertions(+) create mode 100644 api/services/subreddit/[query].ts create mode 100644 src/components/cards/providers/Subreddit.tsx diff --git a/api/services/subreddit/[query].ts b/api/services/subreddit/[query].ts new file mode 100644 index 0000000..706d6ab --- /dev/null +++ b/api/services/subreddit/[query].ts @@ -0,0 +1,31 @@ +import { send, sendError, fetch } from '../../../util/http'; +import { NowRequest, NowResponse } from '@vercel/node'; + +export default async function handler( + req: NowRequest, + res: NowResponse +): Promise { + const { query } = req.query; + + if (!query || typeof query !== 'string') { + return sendError(res, new Error('No query given')); + } + + if (/[^a-zA-Z0-9_]/.test(query)) { + return sendError(res, new Error('Invalid characters')); + } + + try { + const response = await fetch( + `https://reddit.com/r/${query}`, + 'GET' + ); + const body = await response.text(); + const availability = body.includes( + 'Sorry, there aren’t any communities on Reddit with that name.' + ); + send(res, { availability }); + } catch (err) { + sendError(res, err); + } +} diff --git a/public/locales/de/translation.json b/public/locales/de/translation.json index e61927e..2b9d499 100644 --- a/public/locales/de/translation.json +++ b/public/locales/de/translation.json @@ -37,6 +37,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "Twitter" }, "showMore": "Zeig mehr", diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index 1587853..cd4c6e9 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -41,6 +41,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "Twitter" }, "showMore": "show more", diff --git a/public/locales/fr/translation.json b/public/locales/fr/translation.json index e1d2028..a8b17b0 100644 --- a/public/locales/fr/translation.json +++ b/public/locales/fr/translation.json @@ -37,6 +37,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "Twitter" }, "showMore": "afficher plus", diff --git a/public/locales/ja/translation.json b/public/locales/ja/translation.json index c0885ff..bfd2e5e 100644 --- a/public/locales/ja/translation.json +++ b/public/locales/ja/translation.json @@ -37,6 +37,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "Twitter" }, "showMore": "さらに表示", diff --git a/public/locales/pt-BR/translation.json b/public/locales/pt-BR/translation.json index 7d6d22c..6fce64a 100644 --- a/public/locales/pt-BR/translation.json +++ b/public/locales/pt-BR/translation.json @@ -41,6 +41,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "Twitter" }, "showMore": "Mostrar +", diff --git a/public/locales/zh-Hans/translation.json b/public/locales/zh-Hans/translation.json index e0626a5..1a54897 100644 --- a/public/locales/zh-Hans/translation.json +++ b/public/locales/zh-Hans/translation.json @@ -37,6 +37,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "推特" }, "showMore": "更多", diff --git a/public/locales/zh-Hant/translation.json b/public/locales/zh-Hant/translation.json index b95d236..7534b2a 100644 --- a/public/locales/zh-Hant/translation.json +++ b/public/locales/zh-Hant/translation.json @@ -37,6 +37,7 @@ "s3": "AWS S3", "slack": "Slack", "spectrum": "Spectrum", + "subreddit": "Subreddit", "twitter": "推特" }, "showMore": "更多", diff --git a/src/components/cards/index.tsx b/src/components/cards/index.tsx index ccdab36..9922072 100644 --- a/src/components/cards/index.tsx +++ b/src/components/cards/index.tsx @@ -24,6 +24,7 @@ import RubyGemsCard from './providers/RubyGems'; import S3Card from './providers/S3'; import SlackCard from './providers/Slack'; import SpectrumCard from './providers/Spectrum'; +import SubredditCard from './providers/Subreddit'; import TwitterCard from './providers/Twitter'; import VercelCard from './providers/Vercel'; @@ -53,6 +54,7 @@ const Index: React.FC<{ query: string }> = ({ query }) => { {/* */} + diff --git a/src/components/cards/providers/Subreddit.tsx b/src/components/cards/providers/Subreddit.tsx new file mode 100644 index 0000000..3988185 --- /dev/null +++ b/src/components/cards/providers/Subreddit.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { FaReddit } from 'react-icons/fa'; + +import { Card, Repeater, DedicatedAvailability } from '../core'; + +const SubredditCard: React.FC<{ query: string }> = ({ name }) => { + const { t } = useTranslation(); + const lowerCase = name.toLowerCase(); + + const names = [name]; + const moreNames = [ + `get${lowerCase}`, + `${lowerCase}-team`, + ]; + + return ( + + + {(name) => ( + which is /api/services/reddit/[query].ts on GitHub + link={`https://reddit.com/r/${name}`} + prefix="reddit.com/r/" + icon={} + /> + )} + + + ); +}; \ No newline at end of file