CustomizeFunctionSetting.tsx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import React, { useCallback } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import { Card, CardBody } from 'reactstrap';
  4. import AdminCustomizeContainer from '~/client/services/AdminCustomizeContainer';
  5. import { toastSuccess, toastError } from '~/client/util/toastr';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. import AdminUpdateButtonRow from '../Common/AdminUpdateButtonRow';
  8. import CustomizeFunctionOption from './CustomizeFunctionOption';
  9. import PagingSizeUncontrolledDropdown from './PagingSizeUncontrolledDropdown';
  10. type Props = {
  11. adminCustomizeContainer: AdminCustomizeContainer
  12. }
  13. const CustomizeFunctionSetting = (props: Props): JSX.Element => {
  14. const { adminCustomizeContainer } = props;
  15. const { t } = useTranslation();
  16. const onClickSubmit = useCallback(async() => {
  17. try {
  18. await adminCustomizeContainer.updateCustomizeFunction();
  19. toastSuccess(t('toaster.update_successed', { target: t('admin:customize_settings.function'), ns: 'commons' }));
  20. }
  21. catch (err) {
  22. toastError(err);
  23. }
  24. }, [t, adminCustomizeContainer]);
  25. return (
  26. <React.Fragment>
  27. <div className="row">
  28. <div className="col-12">
  29. <h2 className="admin-setting-header">{t('admin:customize_settings.function')}</h2>
  30. <Card className="card custom-card bg-body-tertiary my-3">
  31. <CardBody className="px-0 py-2">
  32. {t('admin:customize_settings.function_desc')}
  33. </CardBody>
  34. </Card>
  35. <div className="row mt-4">
  36. <div className="offset-md-2 col-md-7 text-start">
  37. <CustomizeFunctionOption
  38. optionId="isEnabledAttachTitleHeader"
  39. label={t('admin:customize_settings.function_options.attach_title_header')}
  40. isChecked={adminCustomizeContainer.state.isEnabledAttachTitleHeader}
  41. onChecked={() => { adminCustomizeContainer.switchEnabledAttachTitleHeader() }}
  42. >
  43. <p className="form-text text-muted">
  44. {t('admin:customize_settings.function_options.attach_title_header_desc')}
  45. </p>
  46. </CustomizeFunctionOption>
  47. </div>
  48. </div>
  49. <PagingSizeUncontrolledDropdown
  50. label={t('admin:customize_settings.function_options.list_num_s')}
  51. desc={t('admin:customize_settings.function_options.list_num_desc_s')}
  52. toggleLabel={adminCustomizeContainer.state.pageLimitationS || 20}
  53. dropdownItemSize={[10, 20, 50, 100]}
  54. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationS}
  55. />
  56. <PagingSizeUncontrolledDropdown
  57. label={t('admin:customize_settings.function_options.list_num_m')}
  58. desc={t('admin:customize_settings.function_options.list_num_desc_m')}
  59. toggleLabel={adminCustomizeContainer.state.pageLimitationM || 10}
  60. dropdownItemSize={[5, 10, 20, 50, 100]}
  61. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationM}
  62. />
  63. <PagingSizeUncontrolledDropdown
  64. label={t('admin:customize_settings.function_options.list_num_l')}
  65. desc={t('admin:customize_settings.function_options.list_num_desc_l')}
  66. toggleLabel={adminCustomizeContainer.state.pageLimitationL || 50}
  67. dropdownItemSize={[20, 50, 100, 200]}
  68. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationL}
  69. />
  70. <PagingSizeUncontrolledDropdown
  71. label={t('admin:customize_settings.function_options.list_num_xl')}
  72. desc={t('admin:customize_settings.function_options.list_num_desc_xl')}
  73. toggleLabel={adminCustomizeContainer.state.pageLimitationXL || 20}
  74. dropdownItemSize={[5, 10, 20, 50, 100]}
  75. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationXL}
  76. />
  77. <div className="row">
  78. <div className="offset-md-2 col-md-7 text-start">
  79. <CustomizeFunctionOption
  80. optionId="isEnabledStaleNotification"
  81. label={t('admin:customize_settings.function_options.stale_notification')}
  82. isChecked={adminCustomizeContainer.state.isEnabledStaleNotification}
  83. onChecked={() => { adminCustomizeContainer.switchEnableStaleNotification() }}
  84. >
  85. <p className="form-text text-muted">
  86. {t('admin:customize_settings.function_options.stale_notification_desc')}
  87. </p>
  88. </CustomizeFunctionOption>
  89. </div>
  90. </div>
  91. <div className="row">
  92. <div className="offset-md-2 col-md-7 text-start">
  93. <CustomizeFunctionOption
  94. optionId="isAllReplyShown"
  95. label={t('admin:customize_settings.function_options.show_all_reply_comments')}
  96. isChecked={adminCustomizeContainer.state.isAllReplyShown || false}
  97. onChecked={() => { adminCustomizeContainer.switchIsAllReplyShown() }}
  98. >
  99. <p className="form-text text-muted">
  100. {t('admin:customize_settings.function_options.show_all_reply_comments_desc')}
  101. </p>
  102. </CustomizeFunctionOption>
  103. </div>
  104. </div>
  105. <div className="row">
  106. <div className="offset-md-2 col-md-7 text-start">
  107. <CustomizeFunctionOption
  108. optionId="isSearchScopeChildrenAsDefault"
  109. label={t('admin:customize_settings.function_options.select_search_scope_children_as_default')}
  110. isChecked={adminCustomizeContainer.state.isSearchScopeChildrenAsDefault || false}
  111. onChecked={() => { adminCustomizeContainer.switchIsSearchScopeChildrenAsDefault() }}
  112. >
  113. <p className="form-text text-muted">
  114. {t('admin:customize_settings.function_options.select_search_scope_children_as_default_desc')}
  115. </p>
  116. </CustomizeFunctionOption>
  117. </div>
  118. </div>
  119. <div className="row">
  120. <div className="offset-md-2 col-md-7 text-start">
  121. <CustomizeFunctionOption
  122. optionId="showPageSideAuthors"
  123. label={t('admin:customize_settings.function_options.show_page_side_authors')}
  124. isChecked={adminCustomizeContainer.state.showPageSideAuthors}
  125. onChecked={() => { adminCustomizeContainer.switchShowPageSideAuthors() }}
  126. >
  127. <p className="form-text text-muted">
  128. {t('admin:customize_settings.function_options.show_page_side_authors_desc')}
  129. </p>
  130. </CustomizeFunctionOption>
  131. </div>
  132. </div>
  133. <AdminUpdateButtonRow onClick={onClickSubmit} disabled={adminCustomizeContainer.state.retrieveError != null} />
  134. </div>
  135. </div>
  136. </React.Fragment>
  137. );
  138. };
  139. const CustomizeFunctionSettingWrapper = withUnstatedContainers(CustomizeFunctionSetting, [AdminCustomizeContainer]);
  140. export default CustomizeFunctionSettingWrapper;