Customize.jsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import React, { Fragment } from 'react';
  2. import PropTypes from 'prop-types';
  3. import loggerFactory from '@alias/logger';
  4. import AdminCustomizeContainer from '../../../services/AdminCustomizeContainer';
  5. import AppContainer from '../../../services/AppContainer';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. import { toastError } from '../../../util/apiNotification';
  8. import toArrayIfNot from '../../../../../lib/util/toArrayIfNot';
  9. import { withLoadingSppiner } from '../../SuspenseUtils';
  10. import CustomizeLayoutSetting from './CustomizeLayoutSetting';
  11. import CustomizeThemeSetting from './CustomizeThemeSetting';
  12. import CustomizeFunctionSetting from './CustomizeFunctionSetting';
  13. import CustomizeHighlightSetting from './CustomizeHighlightSetting';
  14. import CustomizeCssSetting from './CustomizeCssSetting';
  15. import CustomizeScriptSetting from './CustomizeScriptSetting';
  16. import CustomizeHeaderSetting from './CustomizeHeaderSetting';
  17. import CustomizeTitle from './CustomizeTitle';
  18. const logger = loggerFactory('growi:services:AdminCustomizePage');
  19. let retrieveErrors = null;
  20. function Customize(props) {
  21. const { appContainer, adminCustomizeContainer } = props;
  22. if (adminCustomizeContainer.state.currentTheme === adminCustomizeContainer.dummyCurrentTheme) {
  23. throw (async() => {
  24. try {
  25. await adminCustomizeContainer.retrieveCustomizeData();
  26. }
  27. catch (err) {
  28. const errs = toArrayIfNot(err);
  29. toastError(errs);
  30. logger.error(errs);
  31. retrieveErrors = errs;
  32. adminCustomizeContainer.setState({ currentTheme: adminCustomizeContainer.dummyCurrentThemeForError });
  33. }
  34. })();
  35. }
  36. if (adminCustomizeContainer.state.currentTheme === adminCustomizeContainer.dummyCurrentThemeForError) {
  37. throw new Error(`${retrieveErrors.length} errors occured`);
  38. }
  39. return (
  40. <Fragment>
  41. <div className="mb-5">
  42. <CustomizeLayoutSetting appContainer={appContainer} />
  43. </div>
  44. <div className="mb-5">
  45. <CustomizeThemeSetting />
  46. </div>
  47. <div className="mb-5">
  48. <CustomizeFunctionSetting />
  49. </div>
  50. <div className="mb-5">
  51. <CustomizeHighlightSetting />
  52. </div>
  53. <div className="mb-5">
  54. <CustomizeTitle />
  55. </div>
  56. <div className="mb-5">
  57. <CustomizeHeaderSetting />
  58. </div>
  59. <div className="mb-5">
  60. <CustomizeCssSetting />
  61. </div>
  62. <div className="mb-5">
  63. <CustomizeScriptSetting />
  64. </div>
  65. </Fragment>
  66. );
  67. }
  68. const CustomizePageWithUnstatedContainer = withUnstatedContainers(withLoadingSppiner(Customize), [AppContainer, AdminCustomizeContainer]);
  69. Customize.propTypes = {
  70. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  71. adminCustomizeContainer: PropTypes.instanceOf(AdminCustomizeContainer).isRequired,
  72. };
  73. export default CustomizePageWithUnstatedContainer;