'use client'; import { useEffect, useState } from 'react'; import useSettings from '@/hooks/useSettings'; import { TopBar, MainContent } from '@/components/layout'; import { persistSettings } from '@/utils/storage/settingsStorage'; import { useAuth } from '@/contexts/AuthContext'; import HFLoginButton from '@/components/HFLoginButton'; import { useMemo } from 'react'; import Link from 'next/link'; export default function Settings() { const { settings, setSettings } = useSettings(); const { status: authStatus, namespace, oauthAvailable, loginWithOAuth, logout, setManualToken, error: authError, token: authToken } = useAuth(); const [status, setStatus] = useState<'idle' | 'saving' | 'success' | 'error'>('idle'); const [manualToken, setManualTokenInput] = useState(settings.HF_TOKEN || ''); const isAuthenticated = authStatus === 'authenticated'; useEffect(() => { setManualTokenInput(settings.HF_TOKEN || ''); }, [settings.HF_TOKEN]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setStatus('saving'); persistSettings(settings) .then(() => { setStatus('success'); }) .catch(error => { console.error('Error saving settings:', error); setStatus('error'); }) .finally(() => { setTimeout(() => setStatus('idle'), 2000); }); }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setSettings(prev => ({ ...prev, [name]: value })); }; const handleManualSubmit = async (e: React.FormEvent) => { e.preventDefault(); await setManualToken(manualToken); }; const authDescription = useMemo(() => { if (authStatus === 'checking') { return 'Checking your Hugging Face session…'; } if (isAuthenticated) { return `Connected as ${namespace}`; } return 'Sign in to use Hugging Face Jobs or submit your own access token.'; }, [authStatus, isAuthenticated, namespace]); return ( <>

Settings

{isAuthenticated ? ( Welcome, {namespace || 'user'} ) : ( Authenticate to unlock training features )}

Sign in with Hugging Face

{authDescription}

{isAuthenticated && ( Authenticated )}
{isAuthenticated ? ( ) : ( <> {!oauthAvailable && ( OAuth is unavailable. Set HF_OAUTH_CLIENT_ID/SECRET on the server. )} )}
{!isAuthenticated && authError && (

{authError}

)}

Manual Token

Paste an access token created at{' '} huggingface.co/settings/tokens .

setManualTokenInput(event.target.value)} className="w-full px-4 py-2 bg-gray-800 border border-gray-700 rounded-lg focus:ring-2 focus:ring-gray-600 focus:border-transparent" placeholder="Enter Hugging Face token" />
{isAuthenticated && authToken === manualToken && ( Active token )}
{authError && (

{authError}

)}

Hugging Face Jobs (Cloud Training)

{status === 'success' &&

Settings saved successfully!

} {status === 'error' &&

Error saving settings. Please try again.

}
); }