import * as React from "react"; import * as d from "../../localData"; import { CSSObject, css } from "@emotion/css"; import { Image } from "./Image"; import { Link } from "./Link"; import type { UseDefinyAppResult } from "../hook/useDefinyApp"; export type TitleItem = { name: string; location: d.Location; }; export type Props = Pick< UseDefinyAppResult, "accountResource" | "language" | "logInState" > & { onJump: UseDefinyAppResult["jump"]; onLogInButtonClick: UseDefinyAppResult["logIn"]; titleItemList: ReadonlyArray; }; export const Header: React.VFC = React.memo((props) => { return (
definy
{props.titleItemList.flatMap((titleItem) => { return [
/
, {titleItem.name} , ]; })}
); }); Header.displayName = "Header"; const UserViewOrLogInButton: React.VFC< Pick & { onJump: UseDefinyAppResult["jump"]; onLogInButtonClick: () => void; } > = (props) => { switch (props.logInState._) { case "LoadingAccountTokenFromIndexedDB": return (
アクセストークンをindexedDBから読み取り中……
); case "Guest": return ( ); case "LoadingAccountData": return (
アカウントの情報を取得中
); case "LoggedIn": { const accountResourceState = props.accountResource.getFromMemoryCache( props.logInState.accountTokenAccountId.accountId ); if ( accountResourceState === undefined || accountResourceState._ !== "Loaded" ) { return (
ログインしているアカウントを取得中……
); } return ( ); } } return (
ログインの準備中
); }; const userViewOrLogInButtonStyle: CSSObject = { justifySelf: "end", alignSelf: "center", }; const SettingLink: React.VFC<{ account: d.Account; language: d.Language; onJump: (urlData: d.LocationAndLanguage) => void; }> = (props) => ( 設定
{props.account.name}
); const LogInButtonList: React.VFC<{ readonly language: d.Language; readonly onLogInButtonClick: () => void; }> = React.memo((props) => (
)); LogInButtonList.displayName = "LogInButtonList"; const GoogleLogInButton: React.VFC<{ language: d.Language; onLogInButtonClick: () => void; }> = React.memo((props) => ( )); GoogleLogInButton.displayName = "GoogleLogInButton"; const GoogleIcon: React.VFC> = React.memo(() => ( {/** blue */} {/** green */} {/** yellow */} {/** red */} )); GoogleIcon.displayName = "GoogleIcon"; const logInMessage = ( provider: d.OpenIdConnectProvider, language: d.Language ): string => { switch (language) { case "English": return `Sign in with ${provider}`; case "Esperanto": return `Ensalutu kun ${provider}`; case "Japanese": return `${provider}でログイン`; } };