import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { promocodesApi, PromoGroup } from '../api/promocodes'; import { AdminBackButton } from '../components/admin'; // Icons const PlusIcon = () => ( ); const EditIcon = () => ( ); const TrashIcon = () => ( ); const UsersIcon = () => ( ); export default function AdminPromoGroups() { const { t } = useTranslation(); const navigate = useNavigate(); const queryClient = useQueryClient(); const [deleteConfirm, setDeleteConfirm] = useState(null); // Query const { data: groupsData, isLoading } = useQuery({ queryKey: ['admin-promo-groups'], queryFn: () => promocodesApi.getPromoGroups({ limit: 100 }), }); // Delete mutation const deleteMutation = useMutation({ mutationFn: promocodesApi.deletePromoGroup, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-promo-groups'] }); setDeleteConfirm(null); }, }); const groups = groupsData?.items || []; return (
{/* Header */}

{t('admin.promoGroups.title')}

{t('admin.promoGroups.subtitle')}

{/* Stats */} {groups.length > 0 && (
{groups.length}
{t('admin.promoGroups.stats.total')}
{groups.reduce((sum, g) => sum + g.members_count, 0)}
{t('admin.promoGroups.stats.members')}
{groups.filter((g) => g.auto_assign_total_spent_kopeks).length}
{t('admin.promoGroups.stats.autoAssign')}
)} {/* List */} {isLoading ? (
) : groups.length === 0 ? (

{t('admin.promoGroups.noGroups')}

) : (
{groups.map((group: PromoGroup) => (

{group.name}

{group.is_default && ( {t('admin.promoGroups.default')} )}
{group.server_discount_percent > 0 && ( {t('admin.promoGroups.servers')}: -{group.server_discount_percent}% )} {group.traffic_discount_percent > 0 && ( {t('admin.promoGroups.traffic')}: -{group.traffic_discount_percent}% )} {group.device_discount_percent > 0 && ( {t('admin.promoGroups.devices')}: -{group.device_discount_percent}% )} {group.period_discounts && Object.keys(group.period_discounts).length > 0 && Object.entries(group.period_discounts).map(([days, percent]) => ( {t('admin.promoGroups.daysShort', { days })}: -{percent}% ))} {group.auto_assign_total_spent_kopeks && group.auto_assign_total_spent_kopeks > 0 && ( {t('admin.promoGroups.autoFrom', { amount: group.auto_assign_total_spent_kopeks / 100, })} )} {t('admin.promoGroups.members', { count: group.members_count })}
))}
)} {/* Delete Confirmation */} {deleteConfirm && (

{t('admin.promoGroups.confirm.title')}

{t('admin.promoGroups.confirm.text')}

)}
); }