Files
CreaBook/client/src/components/SettingsPage.tsx
T
2026-04-05 03:08:53 +02:00

112 lines
3.8 KiB
TypeScript

import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Cpu, Save, Globe } from 'lucide-react';
export default function SettingsPage() {
const [selectedModel] = useState('gpt-4o-mini');
const [imageModel] = useState('stable-diffusion-v1-6');
const { t, i18n } = useTranslation();
const handleLanguageChange = (e: React.ChangeEvent<HTMLSelectElement>) => {
i18n.changeLanguage(e.target.value);
};
const handleSave = () => {
// Settings are now fixed to cloud models
alert('Cloud AI models are configured automatically!');
};
return (
<div className="max-w-2xl mx-auto space-y-6">
<div>
<h2 className="text-2xl font-bold text-gray-900">{t('settings.title')}</h2>
<p className="text-gray-500 mt-1">
Cloud AI configuration and application preferences
</p>
</div>
{/* Language Configuration */}
<div className="card">
<h3 className="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
<Globe className="w-5 h-5" />
{t('settings.language')}
</h3>
<div className="space-y-4">
<div>
<label className="label">{t('settings.languageSelect')}</label>
<select
value={i18n.language}
onChange={handleLanguageChange}
className="input bg-white"
>
<option value="en">{t('settings.english')}</option>
<option value="es">{t('settings.spanish')}</option>
</select>
</div>
</div>
</div>
{/* Cloud AI Configuration */}
<div className="card">
<h3 className="text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2">
<Cpu className="w-5 h-5" />
Cloud AI Settings
</h3>
<div className="space-y-4">
<div>
<label className="label">Text Generation Model</label>
<select
value={selectedModel}
disabled
className="input bg-gray-100"
>
<option value="gpt-4o-mini">OpenAI GPT-4o Mini (via OpenRouter)</option>
</select>
<p className="text-sm text-gray-500 mt-1">
Used for book outlines, chapters, and text generation (free tier)
</p>
</div>
<div>
<label className="label">Image Generation Model</label>
<select
value={imageModel}
disabled
className="input bg-gray-100"
>
<option value="stable-diffusion-v1-6">Stability AI Stable Diffusion v1.6</option>
</select>
<p className="text-sm text-gray-500 mt-1">
Used for AI book cover generation (free credits available)
</p>
</div>
</div>
</div>
{/* API Setup Help */}
<div className="card bg-blue-50 border-blue-200">
<h3 className="font-medium text-blue-900 mb-2">API Key Setup</h3>
<p className="text-sm text-blue-700 mb-3">
Configure your API key in the server/.env file:
</p>
<code className="block bg-white rounded p-3 text-sm font-mono text-blue-800">
OPENROUTER_API_KEY=your_openrouter_api_key_here
</code>
<p className="text-sm text-blue-700 mt-2">
Get a free API key from: <a href="https://openrouter.ai/keys" className="underline" target="_blank" rel="noopener noreferrer">OpenRouter</a>
</p>
</div>
{/* Save Button */}
<div className="flex justify-end">
<button onClick={handleSave} className="btn-primary flex items-center gap-2">
<Save className="w-4 h-4" />
Save Settings
</button>
</div>
</div>
);
}