CustomizeTitle.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React, { FC, useState } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import Card from 'reactstrap/es/Card';
  4. import CardBody from 'reactstrap/es/CardBody';
  5. import { apiv3Put } from '~/client/util/apiv3-client';
  6. import { toastSuccess, toastError } from '~/client/util/toastr';
  7. import { useCustomizeTitle } from '~/stores/context';
  8. import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
  9. export const CustomizeTitle: FC = () => {
  10. const { t } = useTranslation('admin');
  11. const { data: customizeTitle } = useCustomizeTitle();
  12. const [currentCustomizeTitle, setCrrentCustomizeTitle] = useState(customizeTitle);
  13. const onClickSubmit = async() => {
  14. try {
  15. await apiv3Put('/customize-setting/customize-title', {
  16. customizeTitle: currentCustomizeTitle,
  17. });
  18. toastSuccess(t('toaster.update_successed', { target: t('admin:customize_settings.custom_title'), ns: 'commons' }));
  19. }
  20. catch (err) {
  21. toastError(err);
  22. }
  23. };
  24. return (
  25. <React.Fragment>
  26. <div className="row">
  27. <div className="col-12">
  28. <h2 className="admin-setting-header">{t('admin:customize_settings.custom_title')}</h2>
  29. </div>
  30. <div className="col-12">
  31. <Card className="card well">
  32. <CardBody className="px-0 py-2">
  33. {/* eslint-disable react/no-danger */}
  34. <p dangerouslySetInnerHTML={{ __html: t('admin:customize_settings.custom_title_detail') }} />
  35. <ul>
  36. <li>
  37. <span dangerouslySetInnerHTML={{ __html: t('admin:customize_settings.custom_title_detail_placeholder1') }} />
  38. </li>
  39. <li>
  40. <span dangerouslySetInnerHTML={{ __html: t('admin:customize_settings.custom_title_detail_placeholder2') }} />
  41. </li>
  42. <li>
  43. <span dangerouslySetInnerHTML={{ __html: t('admin:customize_settings.custom_title_detail_placeholder3') }} />
  44. </li>
  45. </ul>
  46. {/* eslint-enable react/no-danger */}
  47. </CardBody>
  48. </Card>
  49. </div>
  50. {/* TODO i18n */}
  51. <div className="form-text text-muted col-12">
  52. Default Value: <code>&#123;&#123;pagename&#125;&#125; - &#123;&#123;sitename&#125;&#125;</code>
  53. <br />
  54. Default Output Example: <code className="xml">&lt;title&gt;Page name - My GROWI&lt;&#047;title&gt;</code>
  55. </div>
  56. <div className="form-group col-12">
  57. <input
  58. className="form-control"
  59. defaultValue={currentCustomizeTitle}
  60. onChange={(e) => { setCrrentCustomizeTitle(e.target.value) }}
  61. />
  62. </div>
  63. <div className="col-12">
  64. <AdminUpdateButtonRow onClick={onClickSubmit} disabled={false} />
  65. </div>
  66. </div>
  67. </React.Fragment>
  68. );
  69. };