CustomizeTitle.tsx 2.8 KB

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