LegacySlackIntegration.jsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import React, { useMemo, useState } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { useTranslation } from 'react-i18next';
  4. import loggerFactory from '~/utils/logger';
  5. import { withUnstatedContainers } from '../../UnstatedUtils';
  6. import { toastError } from '~/client/util/apiNotification';
  7. import { toArrayIfNot } from '~/utils/array-utils';
  8. import { withLoadingSppiner } from '../../SuspenseUtils';
  9. import AdminSlackIntegrationLegacyContainer from '~/client/services/AdminSlackIntegrationLegacyContainer';
  10. import SlackConfiguration from './SlackConfiguration';
  11. const logger = loggerFactory('growi:NotificationSetting');
  12. let retrieveErrors = null;
  13. function LegacySlackIntegration(props) {
  14. const { t } = useTranslation();
  15. const { adminSlackIntegrationLegacyContainer } = props;
  16. if (adminSlackIntegrationLegacyContainer.state.webhookUrl === adminSlackIntegrationLegacyContainer.dummyWebhookUrl) {
  17. throw (async() => {
  18. try {
  19. await adminSlackIntegrationLegacyContainer.retrieveData();
  20. }
  21. catch (err) {
  22. const errs = toArrayIfNot(err);
  23. toastError(errs);
  24. logger.error(errs);
  25. retrieveErrors = errs;
  26. adminSlackIntegrationLegacyContainer.setState({ webhookUrl: adminSlackIntegrationLegacyContainer.dummyWebhookUrlForError });
  27. }
  28. })();
  29. }
  30. if (adminSlackIntegrationLegacyContainer.state.webhookUrl === adminSlackIntegrationLegacyContainer.dummyWebhookUrlForError) {
  31. throw new Error(`${retrieveErrors.length} errors occured`);
  32. }
  33. const isDisabled = adminSlackIntegrationLegacyContainer.state.isSlackbotConfigured;
  34. return (
  35. <div data-testid="admin-slack-integration-legacy">
  36. { isDisabled && (
  37. <div className="alert alert-danger">
  38. <i className="icon-minus icon-fw"></i>
  39. {/* eslint-disable-next-line react/no-danger */}
  40. <span dangerouslySetInnerHTML={{ __html: t('admin:slack_integration_legacy.alert_disabled') }}></span>
  41. </div>
  42. ) }
  43. <div className="alert alert-warning">
  44. <i className="icon-info icon-fw"></i>
  45. {/* eslint-disable-next-line react/no-danger */}
  46. <span dangerouslySetInnerHTML={{ __html: t('admin:slack_integration_legacy.alert_deplicated') }}></span>
  47. </div>
  48. <SlackConfiguration />
  49. </div>
  50. );
  51. }
  52. const LegacySlackIntegrationWithUnstatedContainer = withUnstatedContainers(withLoadingSppiner(LegacySlackIntegration), [AdminSlackIntegrationLegacyContainer]);
  53. LegacySlackIntegration.propTypes = {
  54. adminSlackIntegrationLegacyContainer: PropTypes.instanceOf(AdminSlackIntegrationLegacyContainer).isRequired,
  55. };
  56. export default LegacySlackIntegrationWithUnstatedContainer;