SecurityManagement.jsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React, { Suspense } from 'react';
  2. import PropTypes from 'prop-types';
  3. import { toastError } from '../../../util/apiNotification';
  4. import { withUnstatedContainers } from '../../UnstatedUtils';
  5. import toArrayIfNot from '../../../../../lib/util/toArrayIfNot';
  6. import AdminGeneralSecurityContainer from '../../../services/AdminGeneralSecurityContainer';
  7. import SecurityManagementContents from './SecurityManagementContents';
  8. let retrieveErrors = null;
  9. function SecurityManagement(props) {
  10. const { adminGeneralSecurityContainer } = props;
  11. if (adminGeneralSecurityContainer.state.currentRestrictGuestMode === adminGeneralSecurityContainer.dummyCurrentRestrictGuestMode) {
  12. throw (async() => {
  13. try {
  14. await adminGeneralSecurityContainer.retrieveSecurityData();
  15. }
  16. catch (err) {
  17. const errs = toArrayIfNot(err);
  18. toastError(errs);
  19. retrieveErrors = errs;
  20. adminGeneralSecurityContainer.setState({
  21. currentRestrictGuestMode: adminGeneralSecurityContainer.dummyCurrentRestrictGuestModeForError,
  22. });
  23. }
  24. })();
  25. }
  26. if (adminGeneralSecurityContainer.state.currentRestrictGuestMode === adminGeneralSecurityContainer.dummyCurrentRestrictGuestModeForError) {
  27. throw new Error(`${retrieveErrors.length} errors occured`);
  28. }
  29. return <SecurityManagementContents />;
  30. }
  31. SecurityManagement.propTypes = {
  32. adminGeneralSecurityContainer: PropTypes.instanceOf(AdminGeneralSecurityContainer).isRequired,
  33. };
  34. const SecurityManagementWithUnstatedContainer = withUnstatedContainers(SecurityManagement, [AdminGeneralSecurityContainer]);
  35. function SecurityManagementWithContainerWithSuspense(props) {
  36. return (
  37. <Suspense
  38. fallback={(
  39. <div className="row">
  40. <i className="fa fa-5x fa-spinner fa-pulse mx-auto text-muted"></i>
  41. </div>
  42. )}
  43. >
  44. <SecurityManagementWithUnstatedContainer {...props} />
  45. </Suspense>
  46. );
  47. }
  48. export default SecurityManagementWithContainerWithSuspense;