NotificationSetting.jsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import loggerFactory from '@alias/logger';
  5. import { createSubscribedElement } from '../../UnstatedUtils';
  6. import { toastError } from '../../../util/apiNotification';
  7. import AppContainer from '../../../services/AppContainer';
  8. import AdminNotificationContainer from '../../../services/AdminNotificationContainer';
  9. import SlackAppConfiguration from './SlackAppConfiguration';
  10. import UserTriggerNotification from './UserTriggerNotification';
  11. const logger = loggerFactory('growi:NotificationSetting');
  12. class NotificationSetting extends React.Component {
  13. async componentDidMount() {
  14. const { adminNotificationContainer } = this.props;
  15. try {
  16. await adminNotificationContainer.retrieveNotificationData();
  17. }
  18. catch (err) {
  19. toastError(err);
  20. adminNotificationContainer.setState({ retrieveError: err });
  21. logger.error(err);
  22. }
  23. }
  24. render() {
  25. return (
  26. <React.Fragment>
  27. <div className="notification-settings">
  28. <ul className="nav nav-tabs" role="tablist">
  29. <li className="active">
  30. <a href="#slack-configuration" data-toggle="tab" role="tab"><i className="icon-settings"></i> Slack Configuration</a>
  31. </li>
  32. <li>
  33. <a href="#user-trigger-notification" data-toggle="tab" role="tab"><i className="icon-settings"></i> User Trigger Notification</a>
  34. </li>
  35. <li>
  36. <a href="#global-notification" data-toggle="tab" role="tab"><i className="icon-settings"></i> Global Notification</a>
  37. </li>
  38. </ul>
  39. <div className="tab-content m-t-15">
  40. <div id="slack-configuration" className="tab-pane active" role="tabpanel">
  41. <SlackAppConfiguration />
  42. </div>
  43. <div id="user-trigger-notification" className="tab-pane" role="tabpanel">
  44. <UserTriggerNotification />
  45. </div>
  46. <div id="global-notification" className="tab-pane" role="tabpanel">
  47. {/* TODO GE-776 global notification component */}
  48. </div>
  49. </div>
  50. </div>
  51. </React.Fragment>
  52. );
  53. }
  54. }
  55. const NotificationSettingWrapper = (props) => {
  56. return createSubscribedElement(NotificationSetting, props, [AppContainer, AdminNotificationContainer]);
  57. };
  58. NotificationSetting.propTypes = {
  59. t: PropTypes.func.isRequired, // i18next
  60. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  61. adminNotificationContainer: PropTypes.instanceOf(AdminNotificationContainer).isRequired,
  62. };
  63. export default withTranslation()(NotificationSettingWrapper);