AppSettingsPage.jsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React, { Suspense } 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 AdminAppContainer from '../../../services/AdminAppContainer';
  7. import AppSettingsPageContents from './AppSettingsPageContents';
  8. const logger = loggerFactory('growi:appSettings');
  9. function AppSettingsPage(props) {
  10. return (
  11. <Suspense
  12. fallback={(
  13. <div className="row">
  14. <i className="fa fa-5x fa-spinner fa-pulse mx-auto text-muted"></i>
  15. </div>
  16. )}
  17. >
  18. <RenderAppSettingsPageWrapper />
  19. </Suspense>
  20. );
  21. }
  22. function RenderAppSettingsPage(props) {
  23. if (props.adminAppContainer.state.title === props.adminAppContainer.dummyTitle) {
  24. throw new Promise(async() => {
  25. try {
  26. await props.adminAppContainer.retrieveAppSettingsData();
  27. }
  28. catch (err) {
  29. toastError(err);
  30. props.adminAppContainer.setState({ retrieveError: err.message });
  31. logger.error(err);
  32. }
  33. });
  34. }
  35. return <AppSettingsPageContents />;
  36. }
  37. RenderAppSettingsPage.propTypes = {
  38. adminAppContainer: PropTypes.instanceOf(AdminAppContainer).isRequired,
  39. };
  40. /**
  41. * Wrapper component for using unstated
  42. */
  43. const RenderAppSettingsPageWrapper = withUnstatedContainers(RenderAppSettingsPage, [AdminAppContainer]);
  44. export default AppSettingsPage;