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;