import React from "react"; import { List, Avatar, Tag, Button, Select, Popconfirm, message, Spin, Alert, Typography, } from "antd"; import { DeleteOutlined, UserOutlined } from "@ant-design/icons"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { api } from "@/shared/api"; import type { ServerUser, UserRole } from "@/shared/types"; const { Text } = Typography; interface Props { currentUserRole: UserRole; } export const TeamList: React.FC = ({ currentUserRole }) => { const queryClient = useQueryClient(); const { data: users, isLoading, isError, } = useQuery({ queryKey: ["serverUsers"], queryFn: api.getUsers, }); const updateRoleMutation = useMutation({ mutationFn: ({ userId, newRole }: { userId: string; newRole: UserRole }) => api.updateUserRole(userId, newRole), onSuccess: () => { message.success("Роль пользователя обновлена"); queryClient.invalidateQueries({ queryKey: ["serverUsers"] }); }, onError: () => { message.error("Не удалось изменить роль"); }, }); const removeUserMutation = useMutation({ mutationFn: (userId: string) => api.removeUser(userId), onSuccess: () => { message.success("Пользователь удален из команды"); queryClient.invalidateQueries({ queryKey: ["serverUsers"] }); }, onError: () => { message.error("Не удалось удалить пользователя"); }, }); const getRoleColor = (role: UserRole) => { switch (role) { case "OWNER": return "gold"; case "ADMIN": return "blue"; case "OPERATOR": return "default"; default: return "default"; } }; const getRoleName = (role: UserRole) => { switch (role) { case "OWNER": return "Владелец"; case "ADMIN": return "Админ"; case "OPERATOR": return "Оператор"; default: return role; } }; const canDelete = (targetUser: ServerUser) => { if (targetUser.is_me) return false; if (targetUser.role === "OWNER") return false; if (currentUserRole === "ADMIN" && targetUser.role === "ADMIN") return false; return true; }; if (isLoading) { return (
); } if (isError) { return ; } return ( <> ( updateRoleMutation.mutate({ userId: user.user_id, newRole: val, }) } options={[ { value: "ADMIN", label: "Админ" }, { value: "OPERATOR", label: "Оператор" }, ]} /> ) : ( {getRoleName(user.role)} ), removeUserMutation.mutate(user.user_id)} disabled={!canDelete(user)} okText="Да" cancelText="Нет" >