CustomBotWithoutProxySettings.jsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React, { useState, useEffect } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import PropTypes from 'prop-types';
  4. import AppContainer from '../../../services/AppContainer';
  5. import AdminAppContainer from '../../../services/AdminAppContainer';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. import { toastSuccess, toastError } from '../../../util/apiNotification';
  8. import CustomBotWithoutProxySettingsAccordion, { botInstallationStep } from './CustomBotWithoutProxySettingsAccordion';
  9. import CustomBotWithoutProxyIntegrationCard from './CustomBotWithoutProxyIntegrationCard';
  10. import DeleteSlackCredentialsModal from './DeleteSlackCredentialsModal';
  11. const CustomBotWithoutProxySettings = (props) => {
  12. const { appContainer, /* isSlackScopeSet, */ isSetupSlackBot } = props;
  13. const { t } = useTranslation();
  14. const [siteName, setSiteName] = useState('');
  15. const [isDeleteConfirmModalShown, setIsDeleteConfirmModalShown] = useState(false);
  16. const deleteSlackCredentialsHandler = async() => {
  17. try {
  18. await appContainer.apiv3.put('slack-integration/custom-bot-without-proxy', {
  19. slackSigningSecret: '',
  20. slackBotToken: '',
  21. currentBotType: 'customBotWithoutProxy',
  22. });
  23. props.onSetIsSetupSlackBot(false);
  24. props.fetchSlackIntegrationData();
  25. toastSuccess('success');
  26. }
  27. catch (err) {
  28. toastError(err);
  29. }
  30. };
  31. useEffect(() => {
  32. const siteName = appContainer.config.crowi.title;
  33. setSiteName(siteName);
  34. }, [appContainer]);
  35. return (
  36. <>
  37. <h2 className="admin-setting-header">{t('admin:slack_integration.custom_bot_without_proxy_integration')}</h2>
  38. <CustomBotWithoutProxyIntegrationCard
  39. siteName={siteName}
  40. slackWSNameInWithoutProxy={props.slackWSNameInWithoutProxy}
  41. isSlackScopeSet={props.isSlackScopeSet}
  42. />
  43. <h2 className="admin-setting-header">{t('admin:slack_integration.custom_bot_without_proxy_settings')}</h2>
  44. {isSetupSlackBot && (
  45. <button
  46. className="pull-right btn text-danger border-danger"
  47. type="button"
  48. onClick={() => setIsDeleteConfirmModalShown(true)}
  49. >リセット
  50. </button>
  51. ) }
  52. <div className="my-5 mx-3">
  53. <CustomBotWithoutProxySettingsAccordion
  54. {...props}
  55. activeStep={botInstallationStep.CREATE_BOT}
  56. />
  57. </div>
  58. <DeleteSlackCredentialsModal
  59. isOpen={isDeleteConfirmModalShown}
  60. onClose={() => setIsDeleteConfirmModalShown(false)}
  61. onClickDeleteButton={deleteSlackCredentialsHandler}
  62. />
  63. </>
  64. );
  65. };
  66. const CustomBotWithoutProxySettingsWrapper = withUnstatedContainers(CustomBotWithoutProxySettings, [AppContainer, AdminAppContainer]);
  67. CustomBotWithoutProxySettings.propTypes = {
  68. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  69. adminAppContainer: PropTypes.instanceOf(AdminAppContainer).isRequired,
  70. slackSigningSecret: PropTypes.string,
  71. slackSigningSecretEnv: PropTypes.string,
  72. slackBotToken: PropTypes.string,
  73. slackBotTokenEnv: PropTypes.string,
  74. isRgisterSlackCredentials: PropTypes.bool,
  75. isConnectedToSlack: PropTypes.bool,
  76. isSlackScopeSet: PropTypes.bool,
  77. isSetupSlackBot: PropTypes.bool,
  78. slackWSNameInWithoutProxy: PropTypes.string,
  79. onSetIsSetupSlackBot: PropTypes.func,
  80. fetchSlackIntegrationData: PropTypes.func,
  81. };
  82. export default CustomBotWithoutProxySettingsWrapper;