Customize.jsx 3.0 KB

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