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 (
{adminSlackIntegrationLegacyContainer.state.selectSlackOption === 'Incoming Webhooks' ? (

{t('notification_settings.slack_incoming_configuration')}

{ adminSlackIntegrationLegacyContainer.switchIsIncomingWebhookPrioritized() }} />

{t('notification_settings.prioritize_webhook_desc')}

) : (

{t('notification_settings.slack_app_configuration')}

errorNOT RECOMMENDED
{/* eslint-disable-next-line react/no-danger */}
adminSlackIntegrationLegacyContainer.switchSlackOption('Incoming Webhooks')} > {t('notification_settings.use_instead')}
) }

{' '} {t('notification_settings.how_to.header')}

  1. {t('notification_settings.how_to.workspace')}
      {/* eslint-disable-next-line react/no-danger */}
    1. {t('notification_settings.how_to.workspace_desc2')}
    2. {t('notification_settings.how_to.workspace_desc3')}
  2. {t('notification_settings.how_to.at_growi')}
      {/* eslint-disable-next-line react/no-danger */}
); }; SlackConfiguration.propTypes = { t: PropTypes.func.isRequired, // i18next adminSlackIntegrationLegacyContainer: PropTypes.instanceOf(AdminSlackIntegrationLegacyContainer).isRequired, }; const SlackConfigurationWrapperFc = (props) => { const { t } = useTranslation('admin'); return ; }; const SlackConfigurationWrapper = withUnstatedContainers(SlackConfigurationWrapperFc, [AdminSlackIntegrationLegacyContainer]); export default SlackConfigurationWrapper;