import { Button } from '@/components/ui'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card.tsx'; import { Switch } from '@/components/ui/Switch.tsx'; import Textarea from '@/components/ui/Textarea.tsx'; import { useMaintenanceSetting, useSetMaintenance, useSystemHealth, } from '@/hooks/api/useAdminAPI.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; import { useToast } from '@/hooks/useToast.ts'; import { useEffect, useState } from 'react'; const STORAGE_KEY = 'admin:maintenance:message'; const AdminSettingsMaintenancePage = () => { const { t } = useTranslation(); const { data: health, isLoading } = useSystemHealth(); const { success } = useToast(); const [enabled, setEnabled] = useState(false); const [message, setMessage] = useState(''); const [allowedIPsText, setAllowedIPsText] = useState(''); const { data: maintenance, isLoading: isMaintenanceLoading } = useMaintenanceSetting(); const setMaintenance = useSetMaintenance(); // Hydrate from server useEffect(() => { if (maintenance) { setEnabled(maintenance.enabled); setMessage(maintenance.message ?? ''); setAllowedIPsText((maintenance.allowedIPs || []).join(', ')); } }, [maintenance]); const handleToggle = () => { setEnabled(!enabled); success( !enabled ? t('admin.settings.maintenance.enabled') : t('admin.settings.maintenance.disabled') ); }; const handleSave = async () => { const allowedIPs = allowedIPsText .split(',') .map((s) => s.trim()) .filter(Boolean); await setMaintenance.mutateAsync({ enabled, message, allowedIPs }); success(t('admin.settings.maintenance.saved')); }; return (
{t('admin.settings.maintenance.subtitle')}
Loading…
) : (