From 54cd7be8545400b1f7353bf2e56d3b2a0fada472 Mon Sep 17 00:00:00 2001 From: Yasuaki Uechi Date: Wed, 16 Oct 2019 14:14:02 +0900 Subject: [PATCH] feat: add Netlify and GitLab --- api/services/gitlab.ts | 26 +++++++++++++++++++++ web/public/locales/en/translation.json | 2 ++ web/public/locales/ja/translation.json | 2 ++ web/src/components/Icons.tsx | 16 +++++++++++++ web/src/components/Welcome.tsx | 9 +++++++- web/src/components/cards/GitLab.tsx | 31 ++++++++++++++++++++++++++ web/src/components/cards/Netlify.tsx | 30 +++++++++++++++++++++++++ web/src/components/cards/Now.tsx | 2 +- web/src/components/cards/index.tsx | 4 ++++ web/src/util/i18n.ts | 2 +- 10 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 api/services/gitlab.ts create mode 100644 web/src/components/cards/GitLab.tsx create mode 100644 web/src/components/cards/Netlify.tsx diff --git a/api/services/gitlab.ts b/api/services/gitlab.ts new file mode 100644 index 0000000..34749a3 --- /dev/null +++ b/api/services/gitlab.ts @@ -0,0 +1,26 @@ +import {send, sendError, fetch, NowRequest, NowResponse} from '../util/http'; +import nodeFetch from 'node-fetch' + +export default async function handler(req: NowRequest, res: NowResponse) { + const {query} = req.query; + + if (!query) { + return sendError(res, new Error('no query given')); + } + + if ( + /[^\w-]/.test( + query, + ) + ) { + return sendError(res, new Error('invalid characters')); + } + + try { + const response = await nodeFetch(`https://gitlab.com/${query}`, {redirect: 'manual'}); + const availability = response.status === 302; + send(res, {availability}); + } catch (err) { + sendError(res, err); + } +} diff --git a/web/public/locales/en/translation.json b/web/public/locales/en/translation.json index 9a9c416..3f73e05 100644 --- a/web/public/locales/en/translation.json +++ b/web/public/locales/en/translation.json @@ -5,6 +5,7 @@ "providers": { "domains": "Domains", "github": "Github Organization", + "gitlab": "GitLab", "npm": "npm", "pypi": "PyPI", "rubygems": "RubyGems", @@ -21,6 +22,7 @@ "spectrum": "Spectrum", "heroku": "Heroku", "now": "ZEIT Now", + "netlify": "Netlify", "nta": "Company (JP)" }, "countryCode": "us", diff --git a/web/public/locales/ja/translation.json b/web/public/locales/ja/translation.json index 96c5c03..a38c96c 100644 --- a/web/public/locales/ja/translation.json +++ b/web/public/locales/ja/translation.json @@ -5,6 +5,7 @@ "providers": { "domains": "ドメイン", "github": "Github Organization", + "gitlab": "GitLab", "npm": "npm", "pypi": "PyPI", "rubygems": "RubyGems", @@ -21,6 +22,7 @@ "spectrum": "Spectrum", "heroku": "Heroku", "now": "ZEIT Now", + "netlify": "Netlify", "nta": "法人" }, "countryCode": "jp", diff --git a/web/src/components/Icons.tsx b/web/src/components/Icons.tsx index 4410318..9c1d36b 100644 --- a/web/src/components/Icons.tsx +++ b/web/src/components/Icons.tsx @@ -27,3 +27,19 @@ export const NowIcon = () => ( ); + +export const NetlifyIcon = () => ( + +); diff --git a/web/src/components/Welcome.tsx b/web/src/components/Welcome.tsx index ee46942..6f7a31e 100644 --- a/web/src/components/Welcome.tsx +++ b/web/src/components/Welcome.tsx @@ -5,6 +5,7 @@ import {useTranslation} from 'react-i18next'; import { FaMapSigns, FaGithub, + FaGitlab, FaNpm, FaPython, FaGem, @@ -19,7 +20,7 @@ import { import {IoIosBeer} from 'react-icons/io'; import {DiRust, DiHeroku} from 'react-icons/di'; -import {SpectrumIcon, NowIcon} from './Icons'; +import {SpectrumIcon, NowIcon, NetlifyIcon} from './Icons'; import {mobile} from '../util/css'; export default function Welcome() { @@ -38,6 +39,9 @@ export default function Welcome() { {t('providers.github')} + + {t('providers.gitlab')} + {t('providers.npm')} @@ -71,6 +75,9 @@ export default function Welcome() { {t('providers.now')} + + {t('providers.netlify')} + {t('providers.s3')} diff --git a/web/src/components/cards/GitLab.tsx b/web/src/components/cards/GitLab.tsx new file mode 100644 index 0000000..e685a9c --- /dev/null +++ b/web/src/components/cards/GitLab.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import {useTranslation} from 'react-i18next'; +import {FaGitlab} from 'react-icons/fa'; + +import {Card, Repeater, DedicatedAvailability} from './core'; + +const GitLabCard: React.FC<{query: string}> = ({query}) => { + const {t} = useTranslation(); + const lowerCase = query.toLowerCase(); + + const names = [lowerCase]; + + return ( + + + {(name) => ( + } + /> + )} + + + ); +}; + +export default GitLabCard; diff --git a/web/src/components/cards/Netlify.tsx b/web/src/components/cards/Netlify.tsx new file mode 100644 index 0000000..870538c --- /dev/null +++ b/web/src/components/cards/Netlify.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import {useTranslation} from 'react-i18next'; +import {NetlifyIcon} from '../Icons'; + +import {Card, Repeater, DedicatedAvailability} from './core'; + +const NetlifyCard: React.FC<{query: string}> = ({query}) => { + const {t} = useTranslation(); + const lowerCase = query.toLowerCase(); + + const names = [lowerCase]; + + return ( + + + {(name) => ( + } + /> + )} + + + ); +}; + +export default NetlifyCard; diff --git a/web/src/components/cards/Now.tsx b/web/src/components/cards/Now.tsx index b046474..08e06cc 100644 --- a/web/src/components/cards/Now.tsx +++ b/web/src/components/cards/Now.tsx @@ -17,7 +17,7 @@ const NowCard: React.FC<{query: string}> = ({query}) => { } /> diff --git a/web/src/components/cards/index.tsx b/web/src/components/cards/index.tsx index c497944..37b7068 100644 --- a/web/src/components/cards/index.tsx +++ b/web/src/components/cards/index.tsx @@ -5,6 +5,7 @@ import {useTranslation} from 'react-i18next'; import {mobile} from '../../util/css'; import DomainCard from './Domains'; import GithubCard from './GitHubRepository'; +import GitLabCard from './GitLab'; import NpmCard from './Npm'; import PypiCard from './PyPI'; import RubyGemsCard from './RubyGems'; @@ -21,6 +22,7 @@ import AppStoreCard from './AppStore'; import HerokuCard from './Heroku'; import NowCard from './Now'; import NtaCard from './Nta'; +import NetlifyCard from './Netlify'; const Index: React.FC<{query: string}> = ({query}) => { const { @@ -32,6 +34,7 @@ const Index: React.FC<{query: string}> = ({query}) => { + @@ -43,6 +46,7 @@ const Index: React.FC<{query: string}> = ({query}) => { + diff --git a/web/src/util/i18n.ts b/web/src/util/i18n.ts index 2d49806..d1fe077 100644 --- a/web/src/util/i18n.ts +++ b/web/src/util/i18n.ts @@ -14,7 +14,7 @@ i18n backends: [LocalStorageBackend, XHR], backendOptions: [ { - versions: {en: '1.5', ja: '1.5'}, + versions: {en: '1.6', ja: '1.6'}, }, ], },