import React from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import { CopyToClipboard } from 'react-copy-to-clipboard';
// import Button from 'react-bootstrap/es/Button';
import {
Modal, ModalHeader, ModalBody, ModalFooter,
} from 'reactstrap';
import { toastSuccess, toastError } from '../../../util/apiNotification';
import { withUnstatedContainers } from '../../UnstatedUtils';
import AppContainer from '../../../services/AppContainer';
import AdminUsersContainer from '../../../services/AdminUsersContainer';
class UserInviteModal extends React.Component {
constructor(props) {
super(props);
this.state = {
emailInputValue: '',
sendEmail: false,
invitedEmailList: null,
};
this.handleSubmit = this.handleSubmit.bind(this);
this.handleInput = this.handleInput.bind(this);
this.handleCheckBox = this.handleCheckBox.bind(this);
this.onToggleModal = this.onToggleModal.bind(this);
}
onToggleModal() {
this.props.adminUsersContainer.toggleUserInviteModal();
this.setState({ invitedEmailList: null });
}
showToaster() {
toastSuccess('Copied Mail and Password');
}
renderModalBody() {
const { t } = this.props;
return (
<>
{t('admin:user_management.invite_modal.description1')}
{t('admin:user_management.invite_modal.description2')}
{!this.validEmail() && {t('admin:user_management.invite_modal.valid_email')}
}
>
);
}
renderCreatedModalBody() {
const { t } = this.props;
const { invitedEmailList } = this.state;
return (
<>
{t('admin:user_management.invite_modal.temporary_password')}
{t('admin:user_management.invite_modal.send_new_password')}
{invitedEmailList.createdUserList.length > 0 && this.renderCreatedEmail(invitedEmailList.createdUserList)}
{invitedEmailList.existingEmailList.length > 0 && this.renderExistingEmail(invitedEmailList.existingEmailList)}
>
);
}
renderModalFooter() {
const { t, appContainer } = this.props;
const { isMailerSetup } = appContainer.config;
return (
<>
{isMailerSetup
// eslint-disable-next-line react/no-danger
?
// eslint-disable-next-line react/no-danger
:
}
>
);
}
renderCreatedModalFooter() {
const { t } = this.props;
return (
<>
>
);
}
renderCreatedEmail(userList) {
return (
);
}
renderExistingEmail(emailList) {
const { t } = this.props;
return (
<>
{t('admin:user_management.invite_modal.existing_email')}
{emailList.map((user) => {
return (
- {user}
);
})}
>
);
}
validEmail() {
return this.state.emailInputValue.match(/.+@.+\..+/) != null;
}
async handleSubmit() {
const { adminUsersContainer } = this.props;
const array = this.state.emailInputValue.split('\n');
const emailList = array.filter((element) => { return element.match(/.+@.+\..+/) });
const shapedEmailList = emailList.map((email) => { return email.trim() });
try {
const emailList = await adminUsersContainer.createUserInvited(shapedEmailList, this.state.sendEmail);
this.setState({ emailInputValue: '' });
this.setState({ invitedEmailList: emailList });
toastSuccess('Inviting user success');
}
catch (err) {
toastError(err);
}
}
handleInput(event) {
this.setState({ emailInputValue: event.target.value });
}
handleCheckBox() {
this.setState({ sendEmail: !this.state.sendEmail });
}
render() {
const { t, adminUsersContainer } = this.props;
const { invitedEmailList } = this.state;
return (
{t('admin:user_management.invite_users') }
{invitedEmailList == null ? this.renderModalBody()
: this.renderCreatedModalBody()}
{invitedEmailList == null ? this.renderModalFooter()
: this.renderCreatedModalFooter()}
);
}
}
/**
* Wrapper component for using unstated
*/
const UserInviteModalWrapper = withUnstatedContainers(UserInviteModal, [AppContainer, AdminUsersContainer]);
UserInviteModal.propTypes = {
t: PropTypes.func.isRequired, // i18next
appContainer: PropTypes.instanceOf(AppContainer).isRequired,
adminUsersContainer: PropTypes.instanceOf(AdminUsersContainer).isRequired,
};
export default withTranslation()(UserInviteModalWrapper);