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'; type NumberOrEmpty = number | ''; const SettingsIcon = () => ( ); 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.FormEvent) => { 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 (
); } if (error) { return (

{t('admin.partners.settings')}

{t('admin.partners.settingsLoadError')}

); } return (
{/* Header */}

{t('admin.partners.settings')}

{t('admin.partners.settingsSubtitle')}

{/* Referral Program Section */}

{t('admin.partners.settingsSection.referralProgram')}

{/* Program Enabled */}
{/* Partner Section Visible */}
{/* Withdrawal Settings Section */}

{t('admin.partners.settingsSection.withdrawalSettings')}

{/* Withdrawal Enabled */}
{/* Min Amount */}
{ const val = e.target.value; if (val === '') return setFormData({ ...formData, withdrawal_min_amount_kopeks: '' }); const num = parseInt(val); if (!isNaN(num)) setFormData({ ...formData, withdrawal_min_amount_kopeks: num }); }} className="input" disabled={!formData.withdrawal_enabled} />

{t('admin.partners.settingsFields.minAmountDesc')}

{/* Cooldown Days */}
{ const val = e.target.value; if (val === '') return setFormData({ ...formData, withdrawal_cooldown_days: '' }); const num = parseInt(val); if (!isNaN(num)) setFormData({ ...formData, withdrawal_cooldown_days: num }); }} className="input" disabled={!formData.withdrawal_enabled} />

{t('admin.partners.settingsFields.cooldownDaysDesc')}

{/* Requisites Text */}