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 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 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')}
{role.name} {role.isSystem && {t('admin.roles.system')}} {role.maxConfigs < 0 ? t('configs.deviceLimitUnlimited') : role.maxConfigs} {!role.isSystem && ( )}
)} {editing && !open && setEditing(null)} />}
) }