import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Input } from 'reactstrap'; import { gettext } from '../../utils/constants'; import '../../css/files-activities.css'; const propTypes = { availableUsers: PropTypes.array.isRequired, currentSelectedUsers: PropTypes.array.isRequired, setTargetUsers: PropTypes.func.isRequired, toggleSelectUser: PropTypes.func.isRequired }; class UserSelector extends Component { constructor(props) { super(props); this.state = { isPopoverOpen: false, query: '' }; } componentDidMount() { document.addEventListener('click', this.handleOutsideClick); } componentWillUnmount() { document.removeEventListener('click', this.handleOutsideClick); } handleOutsideClick = (e) => { const { isPopoverOpen } = this.state; if (isPopoverOpen && !this.userSelector.contains(e.target)) { this.togglePopover(); } }; togglePopover = () => { this.setState({ isPopoverOpen: !this.state.isPopoverOpen }, () => { if (!this.state.isPopoverOpen) { const { availableUsers } = this.props; const selectedUsers = availableUsers.filter(item => item.isSelected); this.props.setTargetUsers(selectedUsers); } }); }; onToggleClick = (e) => { e.stopPropagation(); this.togglePopover(); }; onQueryChange = (e) => { this.setState({ query: e.target.value }); }; toggleSelectItem = (e, targetItem) => { e.stopPropagation(); this.props.toggleSelectUser(targetItem); }; render() { const { isPopoverOpen, query } = this.state; const { currentSelectedUsers, availableUsers } = this.props; const selectedUsers = availableUsers.filter(item => item.isSelected); const filteredAvailableUsers = query.trim() ? availableUsers.filter(item => item.email.indexOf(query.trim()) != -1) : availableUsers; return (
{gettext('Modified by:')} {currentSelectedUsers.length > 0 && ( {currentSelectedUsers.map(item => item.name).join(', ')} )} {isPopoverOpen && (
this.userSelector = ref}>
)}
); } } UserSelector.propTypes = propTypes; export default UserSelector;