diff --git a/.gitignore b/.gitignore index 82479fd..a96a1a9 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,5 @@ next-env.d.ts /public/typescript/ /app/m-plus-rounded-1c-nohint/ -node_modules \ No newline at end of file +node_modules +.wrangler diff --git a/app/accountMenu.tsx b/app/accountMenu.tsx index 5a73a14..6e13860 100644 --- a/app/accountMenu.tsx +++ b/app/accountMenu.tsx @@ -2,7 +2,7 @@ import { authClient } from "@/lib/auth-client"; import { usePathname, useRouter } from "next/navigation"; -import { useEffect } from "react"; +import { ReactNode, useEffect, useState } from "react"; export function AutoAnonymousLogin() { const { data: session, isPending } = authClient.useSession(); @@ -19,6 +19,12 @@ export function AccountMenu() { const { data: session, isPending } = authClient.useSession(); const pathname = usePathname(); const router = useRouter(); + const [signingInProvider, setSigningInProvider] = useState< + "github" | "google" | null + >(null); + const [signinErrorMessage, setSigninErrorMessage] = useState( + null + ); const signout = () => { if ( @@ -42,86 +48,101 @@ export function AccountMenu() { }); } }; + const signInWithSocial = async (provider: "github" | "google") => { + if (signingInProvider) return; + setSigninErrorMessage(null); + setSigningInProvider(provider); + try { + const result = await authClient.signIn.social({ + provider, + callbackURL: `/clear-cache?redirect=${encodeURIComponent(pathname)}`, + }); + if (result?.error) { + throw new Error(result.error.message); + } + } catch { + setSigningInProvider(null); + setSigninErrorMessage( + "ログインに失敗しました。しばらくしてから再度お試しください。" + ); + } + }; if (isPending || !session) { return
; } + let avatar: ReactNode; + let content: ReactNode; if (session && !session.user.isAnonymous) { - return ( -
- - + avatar = ( +
+ user avatar
); - } - - return ( -
- -
    + content = ( + <> +
  • + ログアウト +
  • + + ); + } else { + avatar = ( + + + + ); + content = ( + <>
  • ログインすると、チャット履歴を保存し別のデバイスからもアクセスできるようになります。
  • + {signinErrorMessage && ( +
  • {signinErrorMessage}
  • + )} {session?.user && ( <>
    @@ -132,7 +153,16 @@ export function AccountMenu() { )} + + ); + } + + return ( +
    + {avatar} +
      + {content}
    -
    + ); } diff --git a/packages/runtime/vitest.config.ts b/packages/runtime/vitest.config.ts index 339f289..a3192f7 100644 --- a/packages/runtime/vitest.config.ts +++ b/packages/runtime/vitest.config.ts @@ -28,6 +28,7 @@ export default defineConfig({ enabled: true, provider: webdriverio(), instances: [{ browser: "chrome" }], + screenshotFailures: false, }, }, optimizeDeps: {