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