CustomizeTitle.jsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withTranslation } from 'react-i18next';
  4. import AppContainer from '../../../services/AppContainer';
  5. import AdminCustomizeContainer from '../../../services/AdminCustomizeContainer';
  6. import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
  7. import { createSubscribedElement } from '../../UnstatedUtils';
  8. import { toastSuccess, toastError } from '../../../util/apiNotification';
  9. class CustomizeTitle extends React.Component {
  10. constructor(props) {
  11. super(props);
  12. this.onClickSubmit = this.onClickSubmit.bind(this);
  13. }
  14. async onClickSubmit() {
  15. const { t, adminCustomizeContainer } = this.props;
  16. try {
  17. await adminCustomizeContainer.updateCustomizeTitle();
  18. toastSuccess(t('toaster.update_successed', { target: t('admin:customize_setting.custom_title') }));
  19. }
  20. catch (err) {
  21. toastError(err);
  22. }
  23. }
  24. render() {
  25. const { t, adminCustomizeContainer } = this.props;
  26. const { currentCustomizeTitle } = adminCustomizeContainer.state;
  27. return (
  28. <React.Fragment>
  29. <h2 className="admin-setting-header">{t('admin:customize_setting.custom_title')}</h2>
  30. <p
  31. className="well"
  32. // eslint-disable-next-line react/no-danger
  33. dangerouslySetInnerHTML={{ __html: t('admin:customize_setting.custom_title_detail') }}
  34. />
  35. {/* TODO i18n */}
  36. <div className="help-block">
  37. Default value: <code>&#123;&#123;page&#125;&#125; - &#123;&#123;sitename&#125;&#125;</code>
  38. <br />
  39. Default output: <pre><code className="xml">&lt;title&gt;/Sandbox - {'GROWI'}&lt;&#047;title&gt;</code></pre>
  40. </div>
  41. <div className="form-group">
  42. <input
  43. className="form-control"
  44. defaultValue={currentCustomizeTitle}
  45. onChange={(e) => { adminCustomizeContainer.changeCustomizeTitle(e.target.value) }}
  46. />
  47. </div>
  48. <AdminUpdateButtonRow onClick={this.onClickSubmit} disabled={adminCustomizeContainer.state.retrieveError != null} />
  49. </React.Fragment>
  50. );
  51. }
  52. }
  53. const CustomizeTitleWrapper = (props) => {
  54. return createSubscribedElement(CustomizeTitle, props, [AppContainer, AdminCustomizeContainer]);
  55. };
  56. CustomizeTitle.propTypes = {
  57. t: PropTypes.func.isRequired, // i18next
  58. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  59. adminCustomizeContainer: PropTypes.instanceOf(AdminCustomizeContainer).isRequired,
  60. };
  61. export default withTranslation()(CustomizeTitleWrapper);