import React, { useCallback, useEffect } from 'react'; import { useTranslation } from 'next-i18next'; import PropTypes from 'prop-types'; import { useForm } from 'react-hook-form'; import AdminSlackIntegrationLegacyContainer from '~/client/services/AdminSlackIntegrationLegacyContainer'; import { toastSuccess, toastError } from '~/client/util/toastr'; import loggerFactory from '~/utils/logger'; import { withUnstatedContainers } from '../../UnstatedUtils'; import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow'; const logger = loggerFactory('growi:slackAppConfiguration'); const SlackConfiguration = (props) => { const { t, adminSlackIntegrationLegacyContainer } = props; const { webhookUrl, slackToken, retrieveError } = adminSlackIntegrationLegacyContainer.state; const { register, handleSubmit, reset } = useForm(); // Sync form with container state useEffect(() => { reset({ webhookUrl, slackToken, }); }, [reset, webhookUrl, slackToken]); const onClickSubmit = useCallback(async(data) => { try { await adminSlackIntegrationLegacyContainer.changeWebhookUrl(data.webhookUrl ?? ''); await adminSlackIntegrationLegacyContainer.changeSlackToken(data.slackToken ?? ''); await adminSlackIntegrationLegacyContainer.updateSlackAppConfiguration(); toastSuccess(t('notification_settings.updated_slackApp')); } catch (err) { toastError(err); logger.error(err); } }, [adminSlackIntegrationLegacyContainer, t]); return (
); }; SlackConfiguration.propTypes = { t: PropTypes.func.isRequired, // i18next adminSlackIntegrationLegacyContainer: PropTypes.instanceOf(AdminSlackIntegrationLegacyContainer).isRequired, }; const SlackConfigurationWrapperFc = (props) => { const { t } = useTranslation('admin'); return