import React from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import loggerFactory from '@alias/logger'; import { Modal, ModalHeader, ModalBody } from 'reactstrap'; import { withUnstatedContainers } from '../../UnstatedUtils'; import { toastSuccess, toastError } from '../../../util/apiNotification'; import AppContainer from '../../../services/AppContainer'; import AdminAppContainer from '../../../services/AdminAppContainer'; const logger = loggerFactory('growi:appSettings'); class MailSetting extends React.Component { constructor(props) { super(props); this.state = { isInitializeValueModalOpen: false, }; this.emailInput = React.createRef(); this.hostInput = React.createRef(); this.portInput = React.createRef(); this.userInput = React.createRef(); this.passwordInput = React.createRef(); this.openInitializeValueModal = this.openInitializeValueModal.bind(this); this.closeInitializeValueModal = this.closeInitializeValueModal.bind(this); this.submitHandler = this.submitHandler.bind(this); this.initialize = this.initialize.bind(this); } openInitializeValueModal() { this.setState({ isInitializeValueModalOpen: true }); } closeInitializeValueModal() { this.setState({ isInitializeValueModalOpen: false }); } async submitHandler() { const { t, adminAppContainer } = this.props; try { await adminAppContainer.updateMailSettingHandler(); toastSuccess(t('toaster.update_successed', { target: t('admin:app_setting.mail_settings') })); } catch (err) { toastError(err); logger.error(err); } } async initialize() { const { t, adminAppContainer } = this.props; try { const mailSettingParams = await adminAppContainer.initializeMailSettingHandler(); toastSuccess(t('toaster.initialize_successed', { target: t('admin:app_setting.mail_settings') })); // convert values to '' if value is null for overwriting values of inputs with refs this.emailInput.current.value = mailSettingParams.fromAddress || ''; this.hostInput.current.value = mailSettingParams.smtpHost || ''; this.portInput.current.value = mailSettingParams.smtpPort || ''; this.userInput.current.value = mailSettingParams.smtpUser || ''; this.passwordInput.current.value = mailSettingParams.smtpPassword || ''; this.closeInitializeValueModal(); } catch (err) { toastError(err); logger.error(err); } } render() { const { t, adminAppContainer } = this.props; return (

{t('admin:app_setting.smtp_used')} {t('admin:app_setting.smtp_but_aws')}
{t('admin:app_setting.neihter_of')}

{ adminAppContainer.changeFromAddress(e.target.value) }} />
{ adminAppContainer.changeSmtpHost(e.target.value) }} />
{ adminAppContainer.changeSmtpPort(e.target.value) }} />
{ adminAppContainer.changeSmtpUser(e.target.value) }} />
{ adminAppContainer.changeSmtpPassword(e.target.value) }} />
{t('admin:app_setting.initialize_mail_modal_header')}
{t('admin:app_setting.confirm_to_initialize_mail_settings')}
); } } /** * Wrapper component for using unstated */ const MailSettingWrapper = withUnstatedContainers(MailSetting, [AppContainer, AdminAppContainer]); MailSetting.propTypes = { t: PropTypes.func.isRequired, // i18next appContainer: PropTypes.instanceOf(AppContainer).isRequired, adminAppContainer: PropTypes.instanceOf(AdminAppContainer).isRequired, }; export default withTranslation()(MailSettingWrapper);