import { connect } from 'react-redux'; import cn from 'classnames'; import withPageTitle from 'HOCs/withPageTitle'; import { IconButton, SlideModal, Input, Button, Loader, NoContent, Popup } from 'UI'; import { init, save, edit, remove as deleteMember, fetchList } from 'Duck/member'; import styles from './manageUsers.css'; import UserItem from './UserItem'; import { confirm } from 'UI/Confirmation'; import { toast } from 'react-toastify'; 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 }) @withPageTitle('Manage Users - OpenReplay Preferences') class ManageUsers extends React.PureComponent { state = { showModal: false, remaining: this.props.account.limits.teamMember.remaining } 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 'Super Admin'; return user.admin ? 'Admin' : ''; }; editHandler = user => { this.init(user) } deleteHandler = async (user) => { if (await confirm({ header: 'Manage 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.closeModal() }); } formContent = member => (