import { Avatar, Card, MultiSelect, Pill, Stack, Text, UnstyledButton, } from "@mantine/core"; import { IconCancel, IconCheck, IconCrown, IconForbid, IconPencil, IconTrash, } from "@tabler/icons-react"; import CustomButton from "Components/CustomButton/CustomButton"; import type { Team, TeamMember } from "Types/Team/Team"; import "./TeamMemberCard.css"; import { useState } from "react"; import { addMember, deleteMember } from "Api/QuantumBackend/TeamManagement"; import { useTeamStore } from "Stores/TeamsStore"; import { notifications } from "@mantine/notifications"; function TeamMemberCard(props: { cur_team: Team; member: TeamMember }) { const { updateTeam } = useTeamStore(); const [is_editing, set_is_editing] = useState(false); const [selected_permissions, set_selected_permissions] = useState( props.member.permissions, ); return ( {props.member.user.keycloak_id == props.cur_team.creator.user.keycloak_id && } {props.member.user.username} {props.member.user.email}
Разрешения: {props.member.user.keycloak_id != props.cur_team.creator.user.keycloak_id && (is_editing ? (
} onClick={() => { addMember({ team_id: props.cur_team.id, user_id: props.member.user.keycloak_id, permissions: selected_permissions, }) .then((member) => { if (member) { updateTeam(props.cur_team.id, { members: [ ...props.cur_team.members.filter( (member) => member.user.keycloak_id != props.member.user.keycloak_id, ), member, ], }); set_is_editing(false); notifications.show({ radius: "md", title: "Права изменены успешно", message: "", icon: , style: { paddingLeft: "5px" }, }); } }) .catch(() => { notifications.show({ radius: "md", title: "Ошибка изменения прав", message: "", color: "red", icon: , style: { paddingLeft: "5px" }, }); }); }} /> } onClick={() => { set_is_editing(false); set_selected_permissions(props.member.permissions); }} />
) : (
} onClick={() => { set_is_editing(true); }} />
))}
{!is_editing ? ( props.member.permissions.map((perm) => ( {perm} )) ) : ( { set_selected_permissions(value); }} /> )}
{ e.stopPropagation(); deleteMember({ team_id: props.cur_team.id, user_id: props.member.user.keycloak_id, }) .then(() => { notifications.show({ radius: "md", title: "Пользователь удален успешно", message: "", icon: , style: { paddingLeft: "5px" }, }); updateTeam(props.cur_team.id, { members: [ ...props.cur_team.members.filter( (member) => member.user.keycloak_id != props.member.user.keycloak_id, ), ], }); }) .catch(() => { notifications.show({ radius: "md", title: "Пользователя не получилось удалить", message: "", color: "red", icon: , style: { paddingLeft: "5px" }, }); }); }} style={{ cursor: "pointer", width: "20px", alignSelf: "flex-end", }} > Добавлен:
{new Date(props.member.joined_at + "Z").toLocaleDateString("ru")} {new Date(props.member.joined_at + "Z").toLocaleTimeString("ru")}
); } export default TeamMemberCard;