import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { gettext } from '../../utils/constants'; import { Button } from 'reactstrap'; import { shareLinkAPI } from '../../utils/share-link-api'; import { Utils } from '../../utils/utils'; import UserSelect from '../user-select'; import toaster from '../toast'; class UserItem extends React.Component { constructor(props) { super(props); this.state = { isHighlighted: false, isOperationShow: false }; } onMouseEnter = () => { this.setState({ isHighlighted: true, isOperationShow: true }); }; onMouseLeave = () => { this.setState({ isHighlighted: false, isOperationShow: false }); }; deleteItem = () => { const { item } = this.props; this.props.deleteItem(item.username); }; render() { const { item } = this.props; const { isHighlighted } = this.state; return (
{item.name} {item.name}
); } } UserItem.propTypes = { repoID: PropTypes.string.isRequired, item: PropTypes.object.isRequired, deleteItem: PropTypes.func.isRequired, }; const propTypes = { repoID: PropTypes.string.isRequired, linkToken: PropTypes.string, setMode: PropTypes.func, path: PropTypes.string, }; class LinkAuthenticatedUsers extends React.Component { constructor(props) { super(props); this.state = { selectedUsers: [], authUsers: [] }; } componentDidMount() { this.listLinkAuthUsers(); } listLinkAuthUsers = () => { const { linkToken, path } = this.props; shareLinkAPI.listShareLinkAuthUsers(linkToken, path).then(res => { this.setState({ authUsers: res.data.auth_list }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; addLinkAuthUsers = () => { const { linkToken, path } = this.props; const { selectedUsers, authUsers } = this.state; if (!selectedUsers || !selectedUsers.length) { return false; } const users = selectedUsers.map((item, index) => item.email); shareLinkAPI.addShareLinkAuthUsers(linkToken, users, path).then(res => { const { success, failed } = res.data; if (success.length) { let newNames = success.map(item => item.name); let msg = gettext('Successfully added %s.').replace('%s', newNames.join(', ')); toaster.success(msg); } if (failed.length) { failed.forEach(item => { let msg = `${item.name}: ${item.error_msg}`; toaster.danger(msg); }); } this.setState({ authUsers: success.concat(authUsers), selectedUsers: [] }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; deleteItem = (username) => { const { linkToken, path } = this.props; let users = [username,]; shareLinkAPI.deleteShareLinkAuthUsers(linkToken, users, path).then(res => { let authUsers = this.state.authUsers.filter(user => { return user.username !== username; }); this.setState({ authUsers: authUsers }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; goBack = () => { this.props.setMode('displayLinkDetails'); }; handleSelectChange = (option) => { this.setState({ selectedUsers: option }); }; render() { let { authUsers } = this.state; const thead = ( ); return (
{gettext('Authenticated users')}
{thead}
{thead} {authUsers.map((item, index) => { return ( ); })}
); } } LinkAuthenticatedUsers.propTypes = propTypes; export default LinkAuthenticatedUsers;