mirror of
https://github.com/uetchy/namae.git
synced 2025-07-02 06:20:02 +09:00
feat: subreddit card
This commit is contained in:
parent
8fabfb9f3c
commit
659d7693f8
31
api/services/subreddit/[query].ts
Normal file
31
api/services/subreddit/[query].ts
Normal file
@ -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<void> {
|
||||
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);
|
||||
}
|
||||
}
|
@ -37,6 +37,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "Twitter"
|
||||
},
|
||||
"showMore": "Zeig mehr",
|
||||
|
@ -41,6 +41,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "Twitter"
|
||||
},
|
||||
"showMore": "show more",
|
||||
|
@ -37,6 +37,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "Twitter"
|
||||
},
|
||||
"showMore": "afficher plus",
|
||||
|
@ -37,6 +37,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "Twitter"
|
||||
},
|
||||
"showMore": "さらに表示",
|
||||
|
@ -41,6 +41,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "Twitter"
|
||||
},
|
||||
"showMore": "Mostrar +",
|
||||
|
@ -37,6 +37,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "推特"
|
||||
},
|
||||
"showMore": "更多",
|
||||
|
@ -37,6 +37,7 @@
|
||||
"s3": "AWS S3",
|
||||
"slack": "Slack",
|
||||
"spectrum": "Spectrum",
|
||||
"subreddit": "Subreddit",
|
||||
"twitter": "推特"
|
||||
},
|
||||
"showMore": "更多",
|
||||
|
@ -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 }) => {
|
||||
<SlackCard query={query} />
|
||||
{/* <InstagramCard query={query} /> */}
|
||||
<SpectrumCard query={query} />
|
||||
<SubredditCard query={query} />
|
||||
<S3Card query={query} />
|
||||
<FirebaseCard query={query} />
|
||||
</Cards>
|
||||
|
32
src/components/cards/providers/Subreddit.tsx
Normal file
32
src/components/cards/providers/Subreddit.tsx
Normal file
@ -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 (
|
||||
<Card title={t('providers.reddit')}>
|
||||
<Repeater items={names} moreItems={moreNames}>
|
||||
{(name) => (
|
||||
<DedicatedAvailability
|
||||
name={name}
|
||||
service="reddit" // route to http://namae.dev/api/services/reddit/<query> which is /api/services/reddit/[query].ts on GitHub
|
||||
link={`https://reddit.com/r/${name}`}
|
||||
prefix="reddit.com/r/"
|
||||
icon={<FaReddit />}
|
||||
/>
|
||||
)}
|
||||
</Repeater>
|
||||
</Card>
|
||||
);
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user