CustomBotNonProxySettings.jsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { useState, useEffect } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { useTranslation } from 'react-i18next';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import AppContainer from '../../../services/AppContainer';
  6. import { toastSuccess, toastError } from '../../../util/apiNotification';
  7. import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
  8. const CustomBotNonProxySettings = (props) => {
  9. const { appContainer } = props;
  10. const { t } = useTranslation();
  11. const [slackSigningSecret, setSlackSigningSecret] = useState('');
  12. const [slackBotToken, setSlackBotToken] = useState('');
  13. const botType = 'non-proxy';
  14. useEffect(() => {
  15. async function fetchData() {
  16. try {
  17. const res = await appContainer.apiv3.get('/slack-integration/');
  18. const { slackSigningSecret, slackBotToken } = res.data.slackBotSettingParams.customBotNonProxySettings;
  19. setSlackSigningSecret(slackSigningSecret);
  20. setSlackBotToken(slackBotToken);
  21. }
  22. catch (err) {
  23. toastError(err);
  24. }
  25. }
  26. fetchData();
  27. }, [appContainer.apiv3]);
  28. async function updateHandler() {
  29. try {
  30. await appContainer.apiv3.put('/slack-integration/custom-bot-non-proxy', {
  31. slackSigningSecret,
  32. slackBotToken,
  33. botType,
  34. });
  35. toastSuccess(t('toaster.update_successed', { target: t('admin:slack_integration.custom_bot_non_proxy_settings') }));
  36. }
  37. catch (err) {
  38. toastError(err);
  39. }
  40. }
  41. return (
  42. <>
  43. <div className="row my-5">
  44. <div className="mx-auto">
  45. <button type="button" className="btn btn-primary text-nowrap mx-1" onClick={() => window.open('https://api.slack.com/apps', '_blank')}>
  46. {t('admin:slack_integration.non_proxy.create_bot')}
  47. </button>
  48. </div>
  49. </div>
  50. <div className="form-group row">
  51. <label className="text-left text-md-right col-md-3 col-form-label">Signing Secret</label>
  52. <div className="col-md-6">
  53. <input className="form-control" type="text" value={slackSigningSecret || ''} onChange={e => setSlackSigningSecret(e.target.value)} />
  54. </div>
  55. </div>
  56. <div className="form-group row mb-5">
  57. <label className="text-left text-md-right col-md-3 col-form-label">Bot User OAuth Token</label>
  58. <div className="col-md-6">
  59. <input className="form-control" type="text" value={slackBotToken || ''} onChange={e => setSlackBotToken(e.target.value)} />
  60. </div>
  61. </div>
  62. <AdminUpdateButtonRow onClick={updateHandler} disabled={false} />
  63. </>
  64. );
  65. };
  66. const CustomBotNonProxySettingsWrapper = withUnstatedContainers(CustomBotNonProxySettings, [AppContainer]);
  67. CustomBotNonProxySettings.propTypes = {
  68. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  69. };
  70. export default CustomBotNonProxySettingsWrapper;