import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { Tooltip } from 'reactstrap'; import { gettext, mediaUrl } from '../../../utils/constants'; import EmptyTip from '../../empty-tip'; import Loading from '../../loading'; const ItemPropTypes = { member: PropTypes.object, index: PropTypes.number, tip: PropTypes.string, memberSelected: PropTypes.object, isMemberSelected: PropTypes.bool, onUserChecked: PropTypes.func.isRequired, }; class Item extends Component { constructor(props) { super(props); this.state = { highlight: false, tooltipOpen: false, }; } handleMouseEnter = () => { this.setState({ highlight: true }); }; handleMouseLeave = () => { this.setState({ highlight: false }); }; onChange = (e) => { const { member } = this.props; this.props.onUserChecked(member); }; toggleTooltip = () => { this.setState({ tooltipOpen: !this.state.tooltipOpen }); }; render() { const { member, memberSelected, isMemberSelected, index, tip } = this.props; if (isMemberSelected) { return ( {member.name} {tip} ); } return ( {member.name} ); } } Item.propTypes = ItemPropTypes; const DepartmentGroupMembersPropTypes = { members: PropTypes.array.isRequired, memberSelected: PropTypes.object.isRequired, onUserChecked: PropTypes.func.isRequired, currentDepartment: PropTypes.object.isRequired, selectedMemberMap: PropTypes.object, selectAll: PropTypes.func.isRequired, unselectAll: PropTypes.func.isRequired, loading: PropTypes.bool, usedFor: PropTypes.oneOf(['add_group_member', 'add_user_share']), keyword: PropTypes.string, searching: PropTypes.bool, usersFound: PropTypes.array }; class DepartmentGroupMembers extends Component { render() { const { members, memberSelected, loading, selectedMemberMap, currentDepartment, usedFor, keyword, searching, usersFound } = this.props; let headerTitle = (currentDepartment.name || '') + ' ' + gettext('members'); if (loading || searching) { return (
); } const itemsShown = keyword ? usersFound : members; const unselectedItems = itemsShown.filter(item => !(item.email in memberSelected) && !selectedMemberMap[item.email]); const addedItems = itemsShown.filter(item => selectedMemberMap[item.email]); const tip = usedFor === 'add_group_member' ? gettext('User is already in this group') : gettext('It is already shared to user'); return (
{keyword ? gettext('Search results') : headerTitle}
{itemsShown.length > 0 && ( <> {unselectedItems.length > 0 ?
{gettext('Select all')}
: itemsShown.length > addedItems.length ?
{gettext('Unselect all')}
: '' } )}
{itemsShown.length > 0 ? {itemsShown.map((member, index) => { return ( ); })}
:

{keyword ? gettext('No users found') : gettext('No members')}

}
); } } DepartmentGroupMembers.propTypes = DepartmentGroupMembersPropTypes; export default DepartmentGroupMembers;