// @flow import * as React from 'react'; import { observable } from 'mobx'; import { inject, observer } from 'mobx-react'; import { PlusIcon } from 'outline-icons'; import Flex from 'shared/components/Flex'; import HelpText from 'components/HelpText'; import Subheading from 'components/Subheading'; import Button from 'components/Button'; import PaginatedList from 'components/PaginatedList'; import Modal from 'components/Modal'; import Collection from 'models/Collection'; import UiStore from 'stores/UiStore'; import AuthStore from 'stores/AuthStore'; import MembershipsStore from 'stores/MembershipsStore'; import UsersStore from 'stores/UsersStore'; import MemberListItem from './components/MemberListItem'; import AddPeopleToCollection from './AddPeopleToCollection'; type Props = { ui: UiStore, auth: AuthStore, collection: Collection, users: UsersStore, memberships: MembershipsStore, onEdit: () => void, }; @observer class CollectionMembers extends React.Component { @observable addModalOpen: boolean = false; handleAddModalOpen = () => { this.addModalOpen = true; }; handleAddModalClose = () => { this.addModalOpen = false; }; handleRemoveUser = user => { try { this.props.memberships.delete({ collectionId: this.props.collection.id, userId: user.id, }); this.props.ui.showToast(`${user.name} was removed from the collection`); } catch (err) { this.props.ui.showToast('Could not remove user'); } }; handleUpdateUser = (user, permission) => { try { this.props.memberships.create({ collectionId: this.props.collection.id, userId: user.id, permission, }); this.props.ui.showToast(`${user.name} permissions were updated`); } catch (err) { this.props.ui.showToast('Could not update user'); } }; render() { const { collection, users, memberships, auth } = this.props; const { user } = auth; if (!user) return null; const key = memberships.orderedData .map(m => m.permission) .concat(collection.private) .join('-'); return ( {collection.private ? ( Choose which team members have access to view and edit documents in the private {collection.name} collection. You can make this collection visible to the entire team by{' '} changing its visibility . ) : ( The {collection.name} collection is accessible by everyone on the team. If you want to limit who can view the collection,{' '} make it private . )} Members ( this.handleRemoveUser(item)} onUpdate={permission => this.handleUpdateUser(item, permission)} /> )} /> ); } } export default inject('auth', 'users', 'memberships', 'ui')(CollectionMembers);