2
0

AppSettingsPage.jsx 1.4 KB

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