Customize.jsx 2.5 KB

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