mirror of
https://github.com/uetchy/namae.git
synced 2025-03-17 04:30:31 +09:00
feat: add firebase
This commit is contained in:
parent
ae5ae0099b
commit
ed0424b5d1
@ -1,3 +1,7 @@
|
|||||||
/web/build
|
/web/build
|
||||||
|
/web/coverage
|
||||||
|
/api/coverage
|
||||||
/.envrc
|
/.envrc
|
||||||
/.env
|
/.env
|
||||||
|
/.github
|
||||||
|
/.vscode
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import nock from 'nock';
|
import nock from 'nock';
|
||||||
import {mockProvider} from '../util/testHelpers';
|
import {mockProvider} from '../util/testHelpers';
|
||||||
|
|
||||||
import provider from './existence';
|
import provider from '../services/existence';
|
||||||
|
|
||||||
test('return false if name is taken', async () => {
|
test('return false if name is taken', async () => {
|
||||||
const result = await mockProvider(provider, {query: 'github.com/uetchy'});
|
const result = await mockProvider(provider, {query: 'github.com/uetchy'});
|
@ -25,7 +25,8 @@
|
|||||||
"now": "Vercel",
|
"now": "Vercel",
|
||||||
"netlify": "Netlify",
|
"netlify": "Netlify",
|
||||||
"nta": "Company (JP)",
|
"nta": "Company (JP)",
|
||||||
"ocaml": "OCaml"
|
"ocaml": "OCaml",
|
||||||
|
"firebase": "Firebase"
|
||||||
},
|
},
|
||||||
"uniqueness": {
|
"uniqueness": {
|
||||||
"high": "Pretty unique",
|
"high": "Pretty unique",
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
"now": "Vercel",
|
"now": "Vercel",
|
||||||
"netlify": "Netlify",
|
"netlify": "Netlify",
|
||||||
"nta": "法人",
|
"nta": "法人",
|
||||||
"ocaml": "OCaml"
|
"ocaml": "OCaml",
|
||||||
|
"firebase": "Firebase"
|
||||||
},
|
},
|
||||||
"uniqueness": {
|
"uniqueness": {
|
||||||
"high": "とてもユニーク",
|
"high": "とてもユニーク",
|
||||||
|
@ -20,7 +20,7 @@ import {
|
|||||||
FaBuilding,
|
FaBuilding,
|
||||||
} from 'react-icons/fa';
|
} from 'react-icons/fa';
|
||||||
import {IoIosBeer} from 'react-icons/io';
|
import {IoIosBeer} from 'react-icons/io';
|
||||||
import {DiRust, DiHeroku} from 'react-icons/di';
|
import {DiRust, DiHeroku, DiFirebase} from 'react-icons/di';
|
||||||
|
|
||||||
import {SpectrumIcon, NowIcon, NetlifyIcon, OcamlIcon} from './Icons';
|
import {SpectrumIcon, NowIcon, NetlifyIcon, OcamlIcon} from './Icons';
|
||||||
import {mobile} from '../util/css';
|
import {mobile} from '../util/css';
|
||||||
@ -99,6 +99,9 @@ const Welcome: React.FC = () => {
|
|||||||
<ListItem>
|
<ListItem>
|
||||||
<FaAws /> {t('providers.s3')}
|
<FaAws /> {t('providers.s3')}
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
<ListItem>
|
||||||
|
<DiFirebase /> {t('providers.firebase')}
|
||||||
|
</ListItem>
|
||||||
<ListItem>
|
<ListItem>
|
||||||
<FaJsSquare /> {t('providers.jsorg')}
|
<FaJsSquare /> {t('providers.jsorg')}
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
@ -25,6 +25,7 @@ import VercelCard from './providers/Vercel';
|
|||||||
import NtaCard from './providers/Nta';
|
import NtaCard from './providers/Nta';
|
||||||
import NetlifyCard from './providers/Netlify';
|
import NetlifyCard from './providers/Netlify';
|
||||||
import OcamlCard from './providers/Ocaml';
|
import OcamlCard from './providers/Ocaml';
|
||||||
|
import FirebaseCard from './providers/Firebase';
|
||||||
|
|
||||||
const Index: React.FC<{query: string}> = ({query}) => {
|
const Index: React.FC<{query: string}> = ({query}) => {
|
||||||
const {
|
const {
|
||||||
@ -53,6 +54,7 @@ const Index: React.FC<{query: string}> = ({query}) => {
|
|||||||
<InstagramCard query={query} />
|
<InstagramCard query={query} />
|
||||||
<SpectrumCard query={query} />
|
<SpectrumCard query={query} />
|
||||||
<S3Card query={query} />
|
<S3Card query={query} />
|
||||||
|
<FirebaseCard query={query} />
|
||||||
</Cards>
|
</Cards>
|
||||||
<Cards>
|
<Cards>
|
||||||
<GithubSearchCard query={query} />
|
<GithubSearchCard query={query} />
|
||||||
|
35
web/src/components/cards/providers/Firebase.tsx
Normal file
35
web/src/components/cards/providers/Firebase.tsx
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
|
import {DiFirebase} from 'react-icons/di';
|
||||||
|
|
||||||
|
import {Card, Repeater, DedicatedAvailability} from '../core';
|
||||||
|
|
||||||
|
const FirebaseCard: React.FC<{query: string}> = ({query}) => {
|
||||||
|
const {t} = useTranslation();
|
||||||
|
|
||||||
|
const sanitizedQuery = query
|
||||||
|
.replace(/[^0-9a-zA-Z_-]/g, '')
|
||||||
|
.replace(/_/g, '-');
|
||||||
|
const lowerCase = sanitizedQuery.toLowerCase();
|
||||||
|
|
||||||
|
const names = [lowerCase];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Card title={t('providers.firebase')}>
|
||||||
|
<Repeater items={names}>
|
||||||
|
{(name) => (
|
||||||
|
<DedicatedAvailability
|
||||||
|
name={name}
|
||||||
|
query={`${name}.firebaseio.com`}
|
||||||
|
service="existence"
|
||||||
|
message="Go to Firebase"
|
||||||
|
link={`https://${name}.firebaseio.com/`}
|
||||||
|
icon={<DiFirebase />}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</Repeater>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FirebaseCard;
|
@ -5,7 +5,7 @@ import XHR from 'i18next-xhr-backend';
|
|||||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||||
import {initReactI18next} from 'react-i18next';
|
import {initReactI18next} from 'react-i18next';
|
||||||
|
|
||||||
const TRANSLATION_VERSION = '1.15';
|
const TRANSLATION_VERSION = '1.16';
|
||||||
|
|
||||||
i18n
|
i18n
|
||||||
.use(Backend)
|
.use(Backend)
|
||||||
|
16
yarn.lock
16
yarn.lock
@ -1895,10 +1895,10 @@
|
|||||||
jest-diff "^25.2.1"
|
jest-diff "^25.2.1"
|
||||||
pretty-format "^25.2.1"
|
pretty-format "^25.2.1"
|
||||||
|
|
||||||
"@types/jest@^25.2.3":
|
"@types/jest@^26.0.0":
|
||||||
version "25.2.3"
|
version "26.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf"
|
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.0.tgz#a6d7573dffa9c68cbbdf38f2e0de26f159e11134"
|
||||||
integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==
|
integrity sha512-/yeMsH9HQ1RLORlXAwoLXe8S98xxvhNtUz3yrgrwbaxYjT+6SFPZZRksmRKRA6L5vsUtSHeN71viDOTTyYAD+g==
|
||||||
dependencies:
|
dependencies:
|
||||||
jest-diff "^25.2.1"
|
jest-diff "^25.2.1"
|
||||||
pretty-format "^25.2.1"
|
pretty-format "^25.2.1"
|
||||||
@ -10730,10 +10730,10 @@ react-helmet@^6.0.0:
|
|||||||
react-fast-compare "^2.0.4"
|
react-fast-compare "^2.0.4"
|
||||||
react-side-effect "^2.1.0"
|
react-side-effect "^2.1.0"
|
||||||
|
|
||||||
react-i18next@11.5.0:
|
react-i18next@11.5.1:
|
||||||
version "11.5.0"
|
version "11.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.5.0.tgz#84a9bb535d44c0c1b336b94de164515c2cc2a714"
|
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.5.1.tgz#084e98555d8800d5508eccc8da1ac652df358d3e"
|
||||||
integrity sha512-V6rUT7MzYBdFCgUrhfr78FHRfnY3CFoR75ET9EP5Py5UPHKyaGiK1MvPx03TesLwsmIaVHlRFU/WLzqCedXevA==
|
integrity sha512-2VSx+dClvmCJTgrw9Nrof4EkggMlzo4s/YZPEUAdI7gU2HTksapkGtFPARzpeTk+3k1zY+Xl6pLHc0LYvsRWAQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
html-parse-stringify2 "2.0.1"
|
html-parse-stringify2 "2.0.1"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user