import { observer } from "mobx-react"; import { PlusIcon } from "outline-icons"; import * as React from "react"; import { useTranslation, Trans } from "react-i18next"; import { toast } from "sonner"; import Group from "~/models/Group"; import User from "~/models/User"; import Button from "~/components/Button"; import Empty from "~/components/Empty"; import Flex from "~/components/Flex"; import Modal from "~/components/Modal"; import PaginatedList from "~/components/PaginatedList"; import Subheading from "~/components/Subheading"; import Text from "~/components/Text"; import usePolicy from "~/hooks/usePolicy"; import useStores from "~/hooks/useStores"; import AddPeopleToGroup from "./AddPeopleToGroup"; import GroupMemberListItem from "./components/GroupMemberListItem"; type Props = { group: Group; }; function GroupMembers({ group }: Props) { const [addModalOpen, setAddModalOpen] = React.useState(false); const { users, groupMemberships } = useStores(); const { t } = useTranslation(); const can = usePolicy(group); const handleAddModal = (state: boolean) => { setAddModalOpen(state); }; const handleRemoveUser = async (user: User) => { try { await groupMemberships.delete({ groupId: group.id, userId: user.id, }); toast.success( t(`{{userName}} was removed from the group`, { userName: user.name, }) ); } catch (err) { toast.error(t("Could not remove user")); } }; return ( {can.update ? ( <> , }} /> ) : ( , }} /> )} Members {t("This group has no members.")}} renderItem={(item: User) => ( handleRemoveUser(item) : undefined} /> )} /> {can.update && ( handleAddModal(false)} isOpen={addModalOpen} > handleAddModal(false)} /> )} ); } export default observer(GroupMembers);