'use client'; import { Header } from '@/components/ui/Header'; import { useUserPreferences } from '@/contexts/UserPreferencesContext'; import { useState, useEffect, useTransition } from 'react'; import { backupClient } from '@/clients/backup-client'; import { jiraClient } from '@/clients/jira-client'; import { getSystemInfo } from '@/actions/system-info'; import { SystemInfo } from '@/services/core/system-info'; import { QuickStats } from './index/QuickStats'; import { SettingsNavigation } from './index/SettingsNavigation'; import { QuickActions } from './index/QuickActions'; import { SystemInfo as SystemInfoComponent } from './index/SystemInfo'; interface SettingsIndexPageClientProps { initialSystemInfo: SystemInfo; } export function SettingsIndexPageClient({ initialSystemInfo }: SettingsIndexPageClientProps) { const { preferences } = useUserPreferences(); // États pour les actions const [isBackupLoading, setIsBackupLoading] = useState(false); const [isJiraTestLoading, setIsJiraTestLoading] = useState(false); const [systemInfo, setSystemInfo] = useState(initialSystemInfo || null); const [messages, setMessages] = useState<{ backup?: { type: 'success' | 'error', text: string }; jira?: { type: 'success' | 'error', text: string }; }>({}); // useTransition pour le server action const [isSystemInfoLoading, startTransition] = useTransition(); // Fonction pour recharger les infos système (server action) const loadSystemInfo = () => { startTransition(async () => { try { const result = await getSystemInfo(); if (result.success && result.data) { setSystemInfo(result.data); } else { console.error('Error loading system info:', result.error); } } catch (error) { console.error('Error loading system info:', error); } }); }; // Fonction pour créer une sauvegarde manuelle const handleCreateBackup = async () => { setIsBackupLoading(true); try { const backup = await backupClient.createBackup(); if (backup) { setMessages(prev => ({ ...prev, backup: { type: 'success', text: `Sauvegarde créée: ${backup.filename}` } })); } else { setMessages(prev => ({ ...prev, backup: { type: 'success', text: 'Sauvegarde sautée: aucun changement détecté' } })); } // Recharger les infos système pour mettre à jour le nombre de sauvegardes loadSystemInfo(); } catch { setMessages(prev => ({ ...prev, backup: { type: 'error', text: 'Erreur lors de la création de la sauvegarde' } })); } finally { setIsBackupLoading(false); } }; // Fonction pour tester la connexion Jira const handleTestJira = async () => { setIsJiraTestLoading(true); try { const status = await jiraClient.testConnection(); setMessages(prev => ({ ...prev, jira: { type: status.connected ? 'success' : 'error', text: status.connected ? 'Connexion Jira réussie !' : `Erreur: ${status.message || 'Connexion échouée'}` } })); } catch { setMessages(prev => ({ ...prev, jira: { type: 'error', text: 'Erreur lors du test de connexion Jira' } })); } finally { setIsJiraTestLoading(false); } }; // Auto-dismiss des messages après 5 secondes useEffect(() => { Object.keys(messages).forEach(key => { if (messages[key as keyof typeof messages]) { const timer = setTimeout(() => { setMessages(prev => ({ ...prev, [key]: undefined })); }, 5000); return () => clearTimeout(timer); } }); }, [messages]); const settingsPages = [ { href: '/settings/general', icon: '⚙️', title: 'Paramètres généraux', description: 'Interface, thème, préférences d\'affichage', status: 'Fonctionnel' }, { href: '/settings/integrations', icon: '🔌', title: 'Intégrations', description: 'Jira, GitHub, Slack et autres services externes', status: 'Fonctionnel' }, { href: '/settings/backup', icon: '💾', title: 'Sauvegardes', description: 'Gestion des sauvegardes automatiques et manuelles', status: 'Fonctionnel' }, { href: '/settings/advanced', icon: '🛠️', title: 'Paramètres avancés', description: 'Logs, debug et maintenance système', status: 'Fonctionnel' } ]; return (
{/* Page Header */}

Paramètres

Configuration de TowerControl et de ses intégrations

{/* Quick Stats */} {/* Settings Sections */} {/* Quick Actions */} {/* System Info */}
); }