// @flow import invariant from "invariant"; import { observable } from "mobx"; import { observer, inject } from "mobx-react"; import { PlusIcon } from "outline-icons"; import * as React from "react"; import { withTranslation, type TFunction, Trans } from "react-i18next"; import { type Match } from "react-router-dom"; import AuthStore from "stores/AuthStore"; import PoliciesStore from "stores/PoliciesStore"; import UsersStore from "stores/UsersStore"; import Invite from "scenes/Invite"; import Bubble from "components/Bubble"; import Button from "components/Button"; import CenteredContent from "components/CenteredContent"; import Empty from "components/Empty"; import HelpText from "components/HelpText"; import Modal from "components/Modal"; import PageTitle from "components/PageTitle"; import PaginatedList from "components/PaginatedList"; import Tab from "components/Tab"; import Tabs, { Separator } from "components/Tabs"; import UserListItem from "./components/UserListItem"; type Props = { auth: AuthStore, users: UsersStore, policies: PoliciesStore, match: Match, t: TFunction, }; @observer class People extends React.Component { @observable inviteModalOpen: boolean = false; componentDidMount() { const { team } = this.props.auth; if (team) { this.props.users.fetchCounts(team.id); } } handleInviteModalOpen = () => { this.inviteModalOpen = true; }; handleInviteModalClose = () => { this.inviteModalOpen = false; }; fetchPage = (params) => { return this.props.users.fetchPage({ ...params, includeSuspended: true }); }; render() { const { auth, policies, match, t } = this.props; const { filter } = match.params; const currentUser = auth.user; const team = auth.team; invariant(currentUser, "User should exist"); invariant(team, "Team should exist"); let users = this.props.users.active; if (filter === "all") { users = this.props.users.all; } else if (filter === "admins") { users = this.props.users.admins; } else if (filter === "suspended") { users = this.props.users.suspended; } else if (filter === "invited") { users = this.props.users.invited; } else if (filter === "viewers") { users = this.props.users.viewers; } const can = policies.abilities(team.id); const { counts } = this.props.users; return (

{t("People")}

Everyone that has signed into Outline appears here. It’s possible that there are other users who have access through{" "} {team.signinMethods} but haven’t signed in yet. {can.inviteUser && ( )} {t("Active")} {t("Admins")} {can.update && ( {t("Suspended")} )} {t("Viewers")} {t("Everyone")} {can.inviteUser && ( <> {t("Invited")} )} {t("No people to see here.")}} fetch={this.fetchPage} renderItem={(item) => ( )} /> {can.inviteUser && ( )}
); } } export default inject( "auth", "users", "policies" )(withTranslation()(People));