import { useState } from 'react' import { createFileRoute } from '@tanstack/react-router' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useTranslation } from 'react-i18next' import { toast } from '@/shared/ui/toast-store' import { Button } from '@/shared/ui/button' import { Badge } from '@/shared/ui/badge' import { listRoles, deleteRole } from '@/features/admin/roles/api' import { RoleFormDialog } from '@/features/admin/roles/RoleFormDialog' import { getPricingSettings } from '@/features/admin/pricing/api' import type { RoleDto } from '@/shared/api/types' export const Route = createFileRoute('/admin/roles')({ component: AdminRolesPage }) function AdminRolesPage() { const { t } = useTranslation() const queryClient = useQueryClient() const [editing, setEditing] = useState(null) const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['admin-roles'], queryFn: listRoles }) const { data: pricing } = useQuery({ queryKey: ['admin-pricing'], queryFn: getPricingSettings }) // Ставки — цена за конфиг В МЕСЯЦ при данном тарифе; итог за период = ставка × месяцев × квота. const totalPrice = (monthlyRate: number | null | undefined, maxConfigs: number, months: number) => monthlyRate == null || maxConfigs < 0 ? t('admin.roles.noPrice') : `${monthlyRate * months * maxConfigs} ₽` const deleteMutation = useMutation({ mutationFn: deleteRole, onSuccess: async () => { toast.success(t('admin.roles.deleted')) await queryClient.invalidateQueries({ queryKey: ['admin-roles'] }) }, onError: () => toast.error(t('auth.genericError')), }) return (
{isLoading &&

} {isError && (

{t('auth.genericError')}

)} {data && (
{data.map((role) => ( ))}
{t('admin.roles.name')} {t('admin.roles.maxConfigs')} {t('admin.roles.maxIpLimit')} {t('admin.roles.totalPerQuarter')} {t('admin.roles.totalHalfYear')} {t('admin.roles.totalPerYear')}
{role.name} {role.isSystem && {t('admin.roles.system')}} {role.maxConfigs < 0 ? t('unlimited') : role.maxConfigs} {role.maxIpLimit < 0 ? t('unlimited') : role.maxIpLimit} {totalPrice(pricing?.pricePerConfigPerQuarter, role.maxConfigs, 3)} {totalPrice(pricing?.pricePerConfigPerQuarter, role.maxConfigs, 6)} {totalPrice(pricing?.pricePerConfigPerYear, role.maxConfigs, 12)} {!role.isSystem && ( )}
)} {editing && !open && setEditing(null)} />}
) }