CustomizeLayoutSetting.jsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import loggerFactory from '@alias/logger';
  5. import { createSubscribedElement } from '../../UnstatedUtils';
  6. import { toastSuccess, toastError } from '../../../util/apiNotification';
  7. import AppContainer from '../../../services/AppContainer';
  8. import AdminCustomizeContainer from '../../../services/AdminCustomizeContainer';
  9. import CustomizeLayoutForm from './CustomizeLayoutForm';
  10. import CustomizeThemeForm from './CustomizeThemeForm';
  11. const logger = loggerFactory('growi:importer');
  12. class CustomizeLayoutSetting extends React.Component {
  13. async onClickSubmit() {
  14. const { t, adminCustomizeContainer } = this.props;
  15. try {
  16. await adminCustomizeContainer.updateCustomizeLayout();
  17. toastSuccess(t('customize_page.update_layout_success'));
  18. }
  19. catch (err) {
  20. toastError(err);
  21. logger.error(err);
  22. }
  23. }
  24. render() {
  25. const { t } = this.props;
  26. return (
  27. <React.Fragment>
  28. <h2>{t('customize_page.Layout')}</h2>
  29. <CustomizeLayoutForm />
  30. <h2>{ t('customize_page.Theme') }</h2>
  31. {/* TODO hide dev mode */}
  32. <div className="alert alert-warning">
  33. <strong>DEBUG MESSAGE:</strong> development build では、リアルタイムプレビューが無効になります
  34. </div>
  35. <CustomizeThemeForm />
  36. <div className="form-group my-3">
  37. <div className="col-xs-offset-4 col-xs-5">
  38. <div className="btn btn-primary" onClick={this.onClickSubmit}>{ t('Update') }</div>
  39. </div>
  40. </div>
  41. </React.Fragment>
  42. );
  43. }
  44. }
  45. const CustomizeLayoutSettingWrapper = (props) => {
  46. return createSubscribedElement(CustomizeLayoutSetting, props, [AppContainer, AdminCustomizeContainer]);
  47. };
  48. CustomizeLayoutSetting.propTypes = {
  49. t: PropTypes.func.isRequired, // i18next
  50. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  51. adminCustomizeContainer: PropTypes.instanceOf(AdminCustomizeContainer).isRequired,
  52. };
  53. export default withTranslation()(CustomizeLayoutSettingWrapper);