Customize.jsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import React, { useEffect, useCallback } from 'react';
  2. import PropTypes from 'prop-types';
  3. import AdminCustomizeContainer from '~/client/services/AdminCustomizeContainer';
  4. import { toastError } from '~/client/util/toastr';
  5. import { toArrayIfNot } from '~/utils/array-utils';
  6. import loggerFactory from '~/utils/logger';
  7. import { withUnstatedContainers } from '../../UnstatedUtils';
  8. import CustomizeCssSetting from './CustomizeCssSetting';
  9. import CustomizeFunctionSetting from './CustomizeFunctionSetting';
  10. import CustomizeLayoutSetting from './CustomizeLayoutSetting';
  11. import CustomizeLogoSetting from './CustomizeLogoSetting';
  12. import CustomizeNoscriptSetting from './CustomizeNoscriptSetting';
  13. import CustomizePresentationSetting from './CustomizePresentationSetting';
  14. import CustomizeScriptSetting from './CustomizeScriptSetting';
  15. import CustomizeSidebarSetting from './CustomizeSidebarSetting';
  16. import CustomizeThemeSetting from './CustomizeThemeSetting';
  17. import { CustomizeTitle } from './CustomizeTitle';
  18. const logger = loggerFactory('growi:services:AdminCustomizePage');
  19. function Customize(props) {
  20. const { adminCustomizeContainer } = props;
  21. const fetchCustomizeSettingsData = useCallback(async() => {
  22. try {
  23. await adminCustomizeContainer.retrieveCustomizeData();
  24. }
  25. catch (err) {
  26. const errs = toArrayIfNot(err);
  27. toastError(errs);
  28. logger.error(errs);
  29. }
  30. }, [adminCustomizeContainer]);
  31. useEffect(() => {
  32. fetchCustomizeSettingsData();
  33. }, [fetchCustomizeSettingsData]);
  34. return (
  35. <div data-testid="admin-customize">
  36. <div className="mb-5">
  37. <CustomizeThemeSetting />
  38. </div>
  39. <div className="mb-5">
  40. <CustomizeLogoSetting />
  41. </div>
  42. <div className="mb-5">
  43. <CustomizeLayoutSetting />
  44. </div>
  45. <div className="mb-5">
  46. <CustomizeSidebarSetting />
  47. </div>
  48. <div className="mb-5">
  49. <CustomizeFunctionSetting />
  50. </div>
  51. <div className="mb-5">
  52. <CustomizePresentationSetting />
  53. </div>
  54. <div className="mb-5">
  55. <CustomizeTitle />
  56. </div>
  57. <div className="mb-5">
  58. <CustomizeScriptSetting />
  59. </div>
  60. <div className="mb-5">
  61. <CustomizeCssSetting />
  62. </div>
  63. <div className="mb-5">
  64. <CustomizeNoscriptSetting />
  65. </div>
  66. </div>
  67. );
  68. }
  69. const CustomizePageWithUnstatedContainer = withUnstatedContainers(Customize, [AdminCustomizeContainer]);
  70. Customize.propTypes = {
  71. adminCustomizeContainer: PropTypes.instanceOf(AdminCustomizeContainer).isRequired,
  72. };
  73. export default CustomizePageWithUnstatedContainer;