NotificationSetting.jsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import loggerFactory from '@alias/logger';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import { toastError } from '../../../util/apiNotification';
  6. import toArrayIfNot from '../../../../../lib/util/toArrayIfNot';
  7. import { withLoadingSppiner } from '../../SuspenseUtils';
  8. import AdminNotificationContainer from '../../../services/AdminNotificationContainer';
  9. import NotificationSettingContents from './NotificationSettingContents';
  10. const logger = loggerFactory('growi:NotificationSetting');
  11. let retrieveErrors = null;
  12. function NotificationSetting(props) {
  13. const { adminNotificationContainer } = props;
  14. if (adminNotificationContainer.state.webhookUrl === adminNotificationContainer.dummyWebhookUrl) {
  15. throw (async() => {
  16. try {
  17. await adminNotificationContainer.retrieveNotificationData();
  18. }
  19. catch (err) {
  20. const errs = toArrayIfNot(err);
  21. toastError(errs);
  22. logger.error(errs);
  23. retrieveErrors = errs;
  24. adminNotificationContainer.setState({ webhookUrl: adminNotificationContainer.dummyWebhookUrlForError });
  25. }
  26. })();
  27. }
  28. if (adminNotificationContainer.state.webhookUrl === adminNotificationContainer.dummyWebhookUrlForError) {
  29. throw new Error(`${retrieveErrors.length} errors occured`);
  30. }
  31. return <NotificationSettingContents />;
  32. }
  33. const NotificationSettingWithUnstatedContainer = withUnstatedContainers(withLoadingSppiner(NotificationSetting), [AdminNotificationContainer]);
  34. NotificationSetting.propTypes = {
  35. adminNotificationContainer: PropTypes.instanceOf(AdminNotificationContainer).isRequired,
  36. };
  37. export default NotificationSettingWithUnstatedContainer;