import { connect } from 'react-redux'; import cn from 'classnames'; import withPageTitle from 'HOCs/withPageTitle'; import { IconButton, SlideModal, Input, Button, Loader, NoContent, Popup, CopyButton } from 'UI'; import { init, save, edit, remove as deleteMember, fetchList, generateInviteLink } from 'Duck/member'; import styles from './manageUsers.css'; import UserItem from './UserItem'; import { confirm } from 'UI/Confirmation'; import { toast } from 'react-toastify'; import BannerMessage from 'Shared/BannerMessage'; const PERMISSION_WARNING = 'You don’t have the permissions to perform this action.'; const LIMIT_WARNING = 'You have reached users limit.'; @connect(state => ({ account: state.getIn([ 'user', 'account' ]), members: state.getIn([ 'members', 'list' ]).filter(u => u.id), member: state.getIn([ 'members', 'instance' ]), errors: state.getIn([ 'members', 'saveRequest', 'errors' ]), loading: state.getIn([ 'members', 'loading' ]), saving: state.getIn([ 'members', 'saveRequest', 'loading' ]), }), { init, save, edit, deleteMember, fetchList, generateInviteLink }) @withPageTitle('Users - OpenReplay Preferences') class ManageUsers extends React.PureComponent { state = { showModal: false, remaining: this.props.account.limits.teamMember.remaining, invited: false } onChange = (e, { name, value }) => this.props.edit({ [ name ]: value }); onChangeCheckbox = ({ target: { checked, name } }) => this.props.edit({ [ name ]: checked }); setFocus = () => this.focusElement.focus(); closeModal = () => this.setState({ showModal: false }); componentWillMount = () => { this.props.fetchList(); } adminLabel = (user) => { if (user.superAdmin) return 'Owner'; return user.admin ? 'Admin' : ''; }; editHandler = user => { this.init(user) } deleteHandler = async (user) => { if (await confirm({ header: 'Users', confirmation: `Are you sure you want to remove this user?` })) { this.props.deleteMember(user.id).then(() => { const { remaining } = this.state; if (remaining <= 0) return; this.setState({ remaining: remaining - 1 }) }); } } save = (e) => { e.preventDefault(); this.props.save(this.props.member) .then(() => { const { errors } = this.props; if (errors && errors.size > 0) { errors.forEach(e => { toast.error(e); }) } this.setState({ invited: true }) // this.closeModal() }); } formContent = (member, account) => (
{ this.focusElement = ref; } } name="name" value={ member.name } onChange={ this.onChange } className={ styles.input } id="name-field" />
{ !account.smtp &&
SMTP is not configured. Please follow (see here how to set it up). You can still add new users, but you’d have to manually copy then send them the invitation link.
}
{ 'Can manage Projects and team members.' }
{ !member.joined && member.invitationLink && }
) init = (v) => { this.props.init(v); this.setState({ showModal: true }); this.setFocus(); } render() { const { members, member, loading, account, hideHeader = false, } = this.props; const { showModal, remaining, invited } = this.state; const isAdmin = account.admin || account.superAdmin; const canAddUsers = isAdmin && remaining !== 0; return (
{ !hideHeader &&

{ (isAdmin ? 'Manage ' : '') + 'Users' }

} { hideHeader &&

{ `Team Size ${members.size}` }

} this.init() } />
} // disabled={ canAddUsers } content={ `${ !canAddUsers ? (!isAdmin ? PERMISSION_WARNING : LIMIT_WARNING) : 'Add team member' }` } size="tiny" inverted position="top left" />
{ members.map(user => ( )) } { !members.size > 0 &&
{ 'No Data.' }
}
); } } export default ManageUsers;