Customize.jsx 2.7 KB

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