// @flow import * as React from 'react'; import styled from 'styled-components'; import { inject, observer } from 'mobx-react'; import { observable } from 'mobx'; import { debounce } from 'lodash'; import Button from 'components/Button'; import Flex from 'shared/components/Flex'; import HelpText from 'components/HelpText'; import Input from 'components/Input'; import Modal from 'components/Modal'; import Empty from 'components/Empty'; import PaginatedList from 'components/PaginatedList'; import GroupNew from 'scenes/GroupNew'; import Collection from 'models/Collection'; import UiStore from 'stores/UiStore'; import AuthStore from 'stores/AuthStore'; import GroupsStore from 'stores/GroupsStore'; import CollectionGroupMembershipsStore from 'stores/CollectionGroupMembershipsStore'; import GroupListItem from 'components/GroupListItem'; type Props = { ui: UiStore, auth: AuthStore, collection: Collection, collectionGroupMemberships: CollectionGroupMembershipsStore, groups: GroupsStore, onSubmit: () => void, }; @observer class AddGroupsToCollection extends React.Component { @observable newGroupModalOpen: boolean = false; @observable query: string = ''; handleNewGroupModalOpen = () => { this.newGroupModalOpen = true; }; handleNewGroupModalClose = () => { this.newGroupModalOpen = false; }; handleFilter = (ev: SyntheticInputEvent) => { this.query = ev.target.value; this.debouncedFetch(); }; debouncedFetch = debounce(() => { this.props.groups.fetchPage({ query: this.query, }); }, 250); handleAddGroup = group => { try { this.props.collectionGroupMemberships.create({ collectionId: this.props.collection.id, groupId: group.id, permission: 'read_write', }); this.props.ui.showToast(`${group.name} was added to the collection`); } catch (err) { this.props.ui.showToast('Could not add user'); console.error(err); } }; render() { const { groups, collection, auth } = this.props; const { user, team } = auth; if (!user || !team) return null; return ( Can’t find the group you’re looking for?{' '} Create a group . No groups matching your search ) : ( No groups left to add ) } items={groups.notInCollection(collection.id, this.query)} fetch={this.query ? undefined : groups.fetchPage} renderItem={item => ( ( )} /> )} /> ); } } const ButtonWrap = styled.div` margin-left: 6px; `; export default inject('auth', 'groups', 'collectionGroupMemberships', 'ui')( AddGroupsToCollection );