import React from 'react'; import { connect } from 'react-redux'; import cn from 'classnames'; import withPageTitle from 'HOCs/withPageTitle'; import { Form, IconButton, SlideModal, Input, Button, Loader, NoContent, Popup, CopyButton } from 'UI'; import Select from 'Shared/Select'; import { init, save, edit, remove as deleteMember, fetchList, generateInviteLink } from 'Duck/member'; import { fetchList as fetchRoles } from 'Duck/roles'; import styles from './manageUsers.module.css'; import UserItem from './UserItem'; import { confirm } from 'UI'; import { toast } from 'react-toastify'; import AnimatedSVG, { ICONS } from 'Shared/AnimatedSVG/AnimatedSVG'; 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' ]), roles: state.getIn(['roles', 'list']).filter(r => !r.protected).map(r => ({ label: r.name, value: r.roleId })).toJS(), isEnterprise: state.getIn([ 'user', 'account', 'edition' ]) === 'ee', }), { init, save, edit, deleteMember, fetchList, generateInviteLink, fetchRoles }) @withPageTitle('Team - OpenReplay Preferences') class ManageUsers extends React.PureComponent { state = { showModal: false, remaining: this.props.account.limits.teamMember.remaining, invited: false } // writeOption = (e, { name, value }) => this.props.edit({ [ name ]: value }); onChange = ({ name, value }) => this.props.edit({ [ name ]: value.value }); onChangeCheckbox = ({ target: { checked, name } }) => this.props.edit({ [ name ]: checked }); setFocus = () => this.focusElement && this.focusElement.focus(); closeModal = () => this.setState({ showModal: false }); componentWillMount = () => { this.props.fetchList(); if (this.props.isEnterprise) { this.props.fetchRoles(); } } adminLabel = (user) => { if (user.superAdmin) return null; 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 = () => { const { member, account, isEnterprise, roles } = this.props; return (
{ this.focusElement = ref; } } name="name" value={ member.name } onChange={ this.onChange } className={ styles.input } id="name-field" />
{ !account.smtp &&
SMTP is not configured (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.' }
{ isEnterprise && (