import { Group, Table, Text, Menu, ActionIcon } from "@mantine/core";
import React from "react";
import { IconDots } from "@tabler/icons-react";
import { modals } from "@mantine/modals";
import { CustomAvatar } from "@/components/ui/custom-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";
import { formatMemberCount } from "@/lib";
import { useTranslation } from "react-i18next";
import Paginate from "@/components/common/paginate.tsx";
import { SearchInput } from "@/components/common/search-input.tsx";
import { usePaginateAndSearch } from "@/hooks/use-paginate-and-search.tsx";
type MemberType = "user" | "group";
interface SpaceMembersProps {
spaceId: string;
readOnly?: boolean;
}
export default function SpaceMembersList({
spaceId,
readOnly,
}: SpaceMembersProps) {
const { t } = useTranslation();
const { search, page, setPage, handleSearch } = usePaginateAndSearch();
const { data, isLoading } = useSpaceMembersQuery(spaceId, {
page,
limit: 100,
query: search,
});
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) => {
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: t("Remove space member"),
children: (