import React, { useState, useEffect } from 'react'; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Settings, Mail } from "lucide-react"; import { Form } from "@/components/ui/form"; import { useForm } from "react-hook-form"; import { useLanguage } from "@/contexts/LanguageContext"; import { useSystemSettings } from "@/hooks/useSystemSettings"; import { GeneralSettings } from "@/services/settingsService"; import SystemSettingsTab from './SystemSettingsTab'; import MailSettingsTab from './MailSettingsTab'; import { GeneralSettingsPanelProps } from './types'; const GeneralSettingsPanel: React.FC = () => { const { t } = useLanguage(); const [isEditing, setIsEditing] = useState(false); const [activeTab, setActiveTab] = useState("system"); const { settings, isLoading, error, updateSettings, isUpdating, testEmailConnection, isTestingConnection } = useSystemSettings(); const form = useForm({ defaultValues: { meta: { appName: '', appURL: '', senderName: '', senderAddress: '', hideControls: false }, smtp: { enabled: false, port: 587, host: '', username: '', authMethod: '', tls: true, localName: '' } } }); useEffect(() => { if (settings) { // Initialize form with existing settings, using system_name for appName if meta.appName is not set const appName = settings.meta?.appName || settings.system_name || ''; form.reset({ ...settings, meta: { appName: appName, appURL: settings.meta?.appURL || '', senderName: settings.meta?.senderName || '', senderAddress: settings.meta?.senderAddress || '', hideControls: settings.meta?.hideControls || false }, smtp: settings.smtp || { enabled: false, port: 587, host: '', username: '', authMethod: '', tls: true, localName: '' } }); } }, [settings, form]); const handleSave = async (formData: GeneralSettings) => { try { // Prepare data for PocketBase settings update (no ID needed) const dataToSave = { ...formData, system_name: formData.meta?.appName || settings?.system_name }; console.log('Saving settings data:', dataToSave); await updateSettings(dataToSave); setIsEditing(false); } catch (error) { console.error("Error updating settings:", error); } }; const handleTestConnection = async () => { try { const smtpConfig = form.getValues('smtp'); await testEmailConnection(smtpConfig); } catch (error) { console.error("Error testing connection:", error); } }; const handleEditClick = () => { console.log('Edit button clicked, setting isEditing to true'); setIsEditing(true); }; const handleCancelClick = () => { console.log('Cancel button clicked, setting isEditing to false'); setIsEditing(false); // Reset form to original values if (settings) { const appName = settings.meta?.appName || settings.system_name || ''; form.reset({ ...settings, meta: { appName: appName, appURL: settings.meta?.appURL || '', senderName: settings.meta?.senderName || '', senderAddress: settings.meta?.senderAddress || '', hideControls: settings.meta?.hideControls || false }, smtp: settings.smtp || { enabled: false, port: 587, host: '', username: '', authMethod: '', tls: true, localName: '' } }); } }; if (isLoading) { return
Loading settings...
; } if (error) { return
Error loading settings
; } return (
{t("generalSettings", "menu")} {t("monitorSSLCertificates", "ssl")}
{t("systemSettings", "settings")} {t("mailSettings", "settings")} {/* Save and Cancel buttons - only show when editing */} {isEditing && (
)}
{/* Edit button - only show when not editing and outside the form */} {!isEditing && ( )}
); }; export default GeneralSettingsPanel;