import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { adminApi } from '../api/admin'; import { AdminBackButton } from '../components/admin'; import { SettingsIcon } from '@/components/icons'; import { toNumber } from '../utils/inputHelpers'; type NumberOrEmpty = number | ''; export default function AdminTicketSettings() { const { t } = useTranslation(); const navigate = useNavigate(); const queryClient = useQueryClient(); const { data: settings, isLoading, error, } = useQuery({ queryKey: ['ticket-settings'], queryFn: adminApi.getTicketSettings, }); const [formData, setFormData] = useState<{ sla_enabled: boolean; sla_minutes: NumberOrEmpty; sla_check_interval_seconds: NumberOrEmpty; sla_reminder_cooldown_minutes: NumberOrEmpty; support_system_mode: string; cabinet_user_notifications_enabled: boolean; cabinet_admin_notifications_enabled: boolean; }>({ sla_enabled: true, sla_minutes: 5, sla_check_interval_seconds: 60, sla_reminder_cooldown_minutes: 15, support_system_mode: 'both', cabinet_user_notifications_enabled: true, cabinet_admin_notifications_enabled: true, }); useEffect(() => { if (settings) { setFormData({ sla_enabled: settings.sla_enabled, sla_minutes: settings.sla_minutes, sla_check_interval_seconds: settings.sla_check_interval_seconds, sla_reminder_cooldown_minutes: settings.sla_reminder_cooldown_minutes, support_system_mode: settings.support_system_mode, cabinet_user_notifications_enabled: settings.cabinet_user_notifications_enabled ?? true, cabinet_admin_notifications_enabled: settings.cabinet_admin_notifications_enabled ?? true, }); } }, [settings]); const updateMutation = useMutation({ mutationFn: adminApi.updateTicketSettings, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['ticket-settings'] }); navigate('/admin/tickets'); }, }); // Validation const isSlaMinutesValid = formData.sla_minutes !== '' && formData.sla_minutes >= 1 && formData.sla_minutes <= 1440; const isCheckIntervalValid = formData.sla_check_interval_seconds !== '' && formData.sla_check_interval_seconds >= 30 && formData.sla_check_interval_seconds <= 600; const isReminderCooldownValid = formData.sla_reminder_cooldown_minutes !== '' && formData.sla_reminder_cooldown_minutes >= 1 && formData.sla_reminder_cooldown_minutes <= 120; const isValid = !formData.sla_enabled || (isSlaMinutesValid && isCheckIntervalValid && isReminderCooldownValid); const handleSubmit = (e: React.SyntheticEvent) => { e.preventDefault(); if (!isValid) return; updateMutation.mutate({ ...formData, sla_minutes: toNumber(formData.sla_minutes, 5), sla_check_interval_seconds: toNumber(formData.sla_check_interval_seconds, 60), sla_reminder_cooldown_minutes: toNumber(formData.sla_reminder_cooldown_minutes, 15), }); }; if (isLoading) { return (
{t('admin.tickets.settingsLoadError')}
{t('admin.tickets.settingsSubtitle')}