3v324v23's picture
Migrate chatbot to Socratic sentiment tutor with Gemini Live Voice Session capability
c622774
Raw
History Blame Contribute Delete
2.91 kB
import React, { useState } from 'react';
import { Eye, EyeOff, Key, RefreshCw } from 'lucide-react';
export default function Settings({
apiKey,
setApiKey,
backendStatus,
checkBackendStatus
}) {
const [showKey, setShowKey] = useState(false);
return (
<div className="settings-drawer">
<div className="settings-group">
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
<label style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
<Key size={16} color="var(--primary)" />
Gemini API Key
</label>
<span style={{ fontSize: '0.75rem', color: 'var(--text-muted)' }}>
Saved locally in your browser
</span>
</div>
<div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>
<input
type={showKey ? 'text' : 'password'}
value={apiKey}
onChange={(e) => setApiKey(e.target.value)}
placeholder={backendStatus.gemini_api_key_configured ? "Using backend environment variable" : "Enter your GEMINI_API_KEY..."}
style={{ width: '100%', paddingRight: '2.5rem' }}
/>
<button
type="button"
onClick={() => setShowKey(!showKey)}
style={{
position: 'absolute',
right: '10px',
background: 'none',
border: 'none',
color: 'var(--text-secondary)',
cursor: 'pointer',
display: 'flex',
alignItems: 'center'
}}
>
{showKey ? <EyeOff size={18} /> : <Eye size={18} />}
</button>
</div>
</div>
<div style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
borderTop: '1px solid var(--border-color)',
paddingTop: '1rem',
marginTop: '0.5rem'
}}>
<div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>
<span style={{ fontSize: '0.85rem', color: 'var(--text-secondary)' }}>Gemini Connection:</span>
<span className={`status-badge`} style={{ padding: '0.2rem 0.6rem' }}>
<span className={`status-dot ${backendStatus.gemini_api_key_configured || apiKey ? 'ready' : 'loading'}`}></span>
<span style={{ marginLeft: '4px', fontSize: '0.8rem' }}>
{backendStatus.gemini_api_key_configured || apiKey ? 'Configured' : 'Missing API Key'}
</span>
</span>
</div>
<button
onClick={checkBackendStatus}
className="settings-toggle-btn"
style={{ padding: '0.35rem 0.75rem' }}
title="Refresh connection status"
>
<RefreshCw size={14} />
Refresh
</button>
</div>
</div>
);
}