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",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "Twitter"
|
"twitter": "Twitter"
|
||||||
},
|
},
|
||||||
"showMore": "Zeig mehr",
|
"showMore": "Zeig mehr",
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
"s3": "AWS S3",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "Twitter"
|
"twitter": "Twitter"
|
||||||
},
|
},
|
||||||
"showMore": "show more",
|
"showMore": "show more",
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"s3": "AWS S3",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "Twitter"
|
"twitter": "Twitter"
|
||||||
},
|
},
|
||||||
"showMore": "afficher plus",
|
"showMore": "afficher plus",
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"s3": "AWS S3",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "Twitter"
|
"twitter": "Twitter"
|
||||||
},
|
},
|
||||||
"showMore": "さらに表示",
|
"showMore": "さらに表示",
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
"s3": "AWS S3",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "Twitter"
|
"twitter": "Twitter"
|
||||||
},
|
},
|
||||||
"showMore": "Mostrar +",
|
"showMore": "Mostrar +",
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"s3": "AWS S3",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "推特"
|
"twitter": "推特"
|
||||||
},
|
},
|
||||||
"showMore": "更多",
|
"showMore": "更多",
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"s3": "AWS S3",
|
"s3": "AWS S3",
|
||||||
"slack": "Slack",
|
"slack": "Slack",
|
||||||
"spectrum": "Spectrum",
|
"spectrum": "Spectrum",
|
||||||
|
"subreddit": "Subreddit",
|
||||||
"twitter": "推特"
|
"twitter": "推特"
|
||||||
},
|
},
|
||||||
"showMore": "更多",
|
"showMore": "更多",
|
||||||
|
@ -24,6 +24,7 @@ import RubyGemsCard from './providers/RubyGems';
|
|||||||
import S3Card from './providers/S3';
|
import S3Card from './providers/S3';
|
||||||
import SlackCard from './providers/Slack';
|
import SlackCard from './providers/Slack';
|
||||||
import SpectrumCard from './providers/Spectrum';
|
import SpectrumCard from './providers/Spectrum';
|
||||||
|
import SubredditCard from './providers/Subreddit';
|
||||||
import TwitterCard from './providers/Twitter';
|
import TwitterCard from './providers/Twitter';
|
||||||
import VercelCard from './providers/Vercel';
|
import VercelCard from './providers/Vercel';
|
||||||
|
|
||||||
@ -53,6 +54,7 @@ const Index: React.FC<{ query: string }> = ({ query }) => {
|
|||||||
<SlackCard query={query} />
|
<SlackCard query={query} />
|
||||||
{/* <InstagramCard query={query} /> */}
|
{/* <InstagramCard query={query} /> */}
|
||||||
<SpectrumCard query={query} />
|
<SpectrumCard query={query} />
|
||||||
|
<SubredditCard query={query} />
|
||||||
<S3Card query={query} />
|
<S3Card query={query} />
|
||||||
<FirebaseCard query={query} />
|
<FirebaseCard query={query} />
|
||||||
</Cards>
|
</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