import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { partnerApi } from '../api/partners'; import { AdminBackButton } from '../components/admin'; import { toNumber } from '../utils/inputHelpers'; import { SettingsIcon } from '@/components/icons'; type NumberOrEmpty = number | ''; export default function AdminPartnerSettings() { const { t } = useTranslation(); const navigate = useNavigate(); const queryClient = useQueryClient(); const { data: settings, isLoading, error, } = useQuery({ queryKey: ['partner-settings'], queryFn: partnerApi.getPartnerSettings, }); const [formData, setFormData] = useState<{ referral_program_enabled: boolean; partner_section_visible: boolean; withdrawal_enabled: boolean; withdrawal_min_amount_kopeks: NumberOrEmpty; withdrawal_cooldown_days: NumberOrEmpty; withdrawal_requisites_text: string; }>({ referral_program_enabled: true, partner_section_visible: true, withdrawal_enabled: false, withdrawal_min_amount_kopeks: 100000, withdrawal_cooldown_days: 30, withdrawal_requisites_text: '', }); useEffect(() => { if (settings) { setFormData({ referral_program_enabled: settings.referral_program_enabled, partner_section_visible: settings.partner_section_visible, withdrawal_enabled: settings.withdrawal_enabled, withdrawal_min_amount_kopeks: settings.withdrawal_min_amount_kopeks, withdrawal_cooldown_days: settings.withdrawal_cooldown_days, withdrawal_requisites_text: settings.withdrawal_requisites_text, }); } }, [settings]); const updateMutation = useMutation({ mutationFn: partnerApi.updatePartnerSettings, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['partner-settings'] }); queryClient.invalidateQueries({ queryKey: ['referral-terms'] }); navigate('/admin/partners'); }, }); // Validation const isMinAmountValid = formData.withdrawal_min_amount_kopeks !== '' && formData.withdrawal_min_amount_kopeks >= 0 && formData.withdrawal_min_amount_kopeks <= 100_000_000; const isCooldownValid = formData.withdrawal_cooldown_days !== '' && formData.withdrawal_cooldown_days >= 0 && formData.withdrawal_cooldown_days <= 365; const isValid = !formData.withdrawal_enabled || (isMinAmountValid && isCooldownValid); const handleSubmit = (e: React.SyntheticEvent) => { e.preventDefault(); if (!isValid) return; updateMutation.mutate({ ...formData, withdrawal_min_amount_kopeks: toNumber(formData.withdrawal_min_amount_kopeks, 100000), withdrawal_cooldown_days: toNumber(formData.withdrawal_cooldown_days, 30), }); }; if (isLoading) { return (
{t('admin.partners.settingsLoadError')}
{t('admin.partners.settingsSubtitle')}