'use client'; import { AppBar } from '@/components/parts/app-bar'; import { Bread } from '@/components/parts/bread'; import { OldAppBar } from '@/components/parts/old-app-bar'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; import { sendLog } from '@/services/gradio'; import { useStateStore } from '@/store/state'; import { type UserState, useUserStore } from '@/store/user'; import { SessionProvider, getProviders, signIn, useSession } from 'next-auth/react'; import Image from 'next/image'; import { usePathname } from 'next/navigation'; import { useEffect, useRef, useState } from 'react'; export function AuthWrapper({ children }: { children: React.ReactNode }) { return ( {children} ); } function InnerAuthWrapper({ children }: { children: React.ReactNode }) { const { data: session, status } = useSession(); const { setUser } = useUserStore(); const logSentRef = useRef(false); const [hasOktaProvider, setHasOktaProvider] = useState(null); const isProduction = process.env.NEXT_PUBLIC_APP_ENV === 'production'; // NextAuthで利用可能なプロバイダーをチェック useEffect(() => { getProviders().then((providers) => { setHasOktaProvider(!!providers?.okta); }); }, []); useEffect(() => { setUser(session as UserState); // Send log only once when user logs in if (session?.user?.email && !logSentRef.current) { sendLog(session.user.email); logSentRef.current = true; } }, [session, setUser]); const pathname = usePathname(); const { getScoreLoading, getMomentLoading } = useStateStore(); const showBreadOnPages = [ '/', '/speed-comparison-input', '/speed-comparison-result', '/prediction-input', '/prediction-result', '/detail', '/refresh-moments', '/refresh-moments/result', ]; // プロバイダーチェック中はローディング表示 if (hasOktaProvider === null) { return (
); } // Oktaプロバイダーが利用できない場合は認証をスキップ if (!hasOktaProvider) { return ( <> {isProduction ? : }
); } // 本番環境では認証を有効化 if (status === 'loading') { return (
); } if (status === 'unauthenticated') { return (
{/* 背景ビデオ */}
); } if (session) { return ( <> {isProduction ? : }
); } }