// @flow import * as React from "react"; import invariant from "invariant"; import { observable } from "mobx"; import { observer, inject } from "mobx-react"; import { PlusIcon } from "outline-icons"; import { type Match } from "react-router-dom"; import Empty from "components/Empty"; import { ListPlaceholder } from "components/LoadingPlaceholder"; import Modal from "components/Modal"; import Button from "components/Button"; import GroupNew from "scenes/GroupNew"; import CenteredContent from "components/CenteredContent"; import PageTitle from "components/PageTitle"; import HelpText from "components/HelpText"; import GroupListItem from "components/GroupListItem"; import List from "components/List"; import Tabs from "components/Tabs"; import Tab from "components/Tab"; import GroupMenu from "menus/GroupMenu"; import AuthStore from "stores/AuthStore"; import GroupsStore from "stores/GroupsStore"; import PoliciesStore from "stores/PoliciesStore"; type Props = { auth: AuthStore, groups: GroupsStore, policies: PoliciesStore, match: Match, }; @observer class Groups extends React.Component { @observable newGroupModalOpen: boolean = false; componentDidMount() { this.props.groups.fetchPage({ limit: 100 }); } handleNewGroupModalOpen = () => { this.newGroupModalOpen = true; }; handleNewGroupModalClose = () => { this.newGroupModalOpen = false; }; render() { const { auth, policies, groups } = this.props; const currentUser = auth.user; const team = auth.team; invariant(currentUser, "User should exist"); invariant(team, "Team should exist"); const showLoading = groups.isFetching && !groups.orderedData.length; const showEmpty = groups.isLoaded && !groups.orderedData.length; const can = policies.abilities(team.id); return (

Groups

Groups can be used to organize and manage the people on your team. {can.group && ( )} All Groups {groups.orderedData.map((group) => ( ( )} showFacepile /> ))} {showEmpty && No groups to see here.} {showLoading && }
); } } export default inject("auth", "groups", "policies")(Groups);