import { Group, Table, Text, Menu, ActionIcon } from "@mantine/core"; import { useParams } from "react-router-dom"; import React from "react"; import { IconDots } from "@tabler/icons-react"; import { modals } from "@mantine/modals"; import { UserAvatar } from "@/components/ui/user-avatar.tsx"; import { useChangeSpaceMemberRoleMutation, useRemoveSpaceMemberMutation, useSpaceMembersQuery, } from "@/features/space/queries/space-query.ts"; import { IconGroupCircle } from "@/components/icons/icon-people-circle.tsx"; import { IRemoveSpaceMember } from "@/features/space/types/space.types.ts"; import RoleSelectMenu from "@/components/ui/role-select-menu.tsx"; import { getSpaceRoleLabel, spaceRoleData, } from "@/features/space/types/space-role-data.ts"; type MemberType = "user" | "group"; interface SpaceMembersProps { spaceId: string; } export default function SpaceMembersList({ spaceId }: SpaceMembersProps) { const { data, isLoading } = useSpaceMembersQuery(spaceId); const removeSpaceMember = useRemoveSpaceMemberMutation(); const changeSpaceMemberRoleMutation = useChangeSpaceMemberRoleMutation(); const handleRoleChange = async ( memberId: string, type: MemberType, newRole: string, currentRole: string, ) => { if (newRole === currentRole) { return; } const memberRoleUpdate: { spaceId: string; role: string; userId?: string; groupId?: string; } = { spaceId: spaceId, role: newRole, }; if (type === "user") { memberRoleUpdate.userId = memberId; } if (type === "group") { memberRoleUpdate.groupId = memberId; } await changeSpaceMemberRoleMutation.mutateAsync(memberRoleUpdate); }; const onRemove = async (memberId: string, type: MemberType) => { console.log("remove", spaceId); const memberToRemove: IRemoveSpaceMember = { spaceId: spaceId, }; if (type === "user") { memberToRemove.userId = memberId; } if (type === "group") { memberToRemove.groupId = memberId; } await removeSpaceMember.mutateAsync(memberToRemove); }; const openRemoveModal = (memberId: string, type: MemberType) => modals.openConfirmModal({ title: "Remove space member", children: ( Are you sure you want to remove this user from the space? The user will lose all access to this space. ), centered: true, labels: { confirm: "Remove", cancel: "Cancel" }, confirmProps: { color: "red" }, onConfirm: () => onRemove(memberId, type), }); return ( <> {data && ( Member Role {data?.items.map((member, index) => ( {member.type === "user" && ( )} {member.type === "group" && }
{member?.name} {member.type == "user" && member?.email} {member.type == "group" && `Group - ${member?.memberCount === 1 ? "1 member" : `${member?.memberCount} members`}`}
handleRoleChange( member.id, member.type, newRole, member.role, ) } /> openRemoveModal(member.id, member.type)} > Remove space member
))}
)} ); }