CustomizeFunctionSetting.tsx 7.1 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/apiNotification';
  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') }));
  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 well my-3">
  31. <CardBody className="px-0 py-2">
  32. {t('admin:customize_settings.function_desc')}
  33. </CardBody>
  34. </Card>
  35. <div className="form-group row">
  36. <div className="offset-md-3 col-md-6 text-left">
  37. <CustomizeFunctionOption
  38. optionId="isSavedStatesOfTabChanges"
  39. label={t('admin:customize_settings.function_options.tab_switch')}
  40. isChecked={adminCustomizeContainer.state.isSavedStatesOfTabChanges}
  41. onChecked={() => { adminCustomizeContainer.switchSavedStatesOfTabChanges() }}
  42. >
  43. <p className="form-text text-muted">
  44. {t('admin:customize_settings.function_options.tab_switch_desc1')}<br />
  45. {t('admin:customize_settings.function_options.tab_switch_desc2')}
  46. </p>
  47. </CustomizeFunctionOption>
  48. </div>
  49. </div>
  50. <div className="form-group row">
  51. <div className="offset-md-3 col-md-6 text-left">
  52. <CustomizeFunctionOption
  53. optionId="isEnabledAttachTitleHeader"
  54. label={t('admin:customize_settings.function_options.attach_title_header')}
  55. isChecked={adminCustomizeContainer.state.isEnabledAttachTitleHeader}
  56. onChecked={() => { adminCustomizeContainer.switchEnabledAttachTitleHeader() }}
  57. >
  58. <p className="form-text text-muted">
  59. {t('admin:customize_settings.function_options.attach_title_header_desc')}
  60. </p>
  61. </CustomizeFunctionOption>
  62. </div>
  63. </div>
  64. <PagingSizeUncontrolledDropdown
  65. label={t('admin:customize_settings.function_options.list_num_s')}
  66. desc={t('admin:customize_settings.function_options.list_num_desc_s')}
  67. toggleLabel={adminCustomizeContainer.state.pageLimitationS || 20}
  68. dropdownItemSize={[10, 20, 50, 100]}
  69. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationS}
  70. />
  71. <PagingSizeUncontrolledDropdown
  72. label={t('admin:customize_settings.function_options.list_num_m')}
  73. desc={t('admin:customize_settings.function_options.list_num_desc_m')}
  74. toggleLabel={adminCustomizeContainer.state.pageLimitationM || 10}
  75. dropdownItemSize={[5, 10, 20, 50, 100]}
  76. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationM}
  77. />
  78. <PagingSizeUncontrolledDropdown
  79. label={t('admin:customize_settings.function_options.list_num_l')}
  80. desc={t('admin:customize_settings.function_options.list_num_desc_l')}
  81. toggleLabel={adminCustomizeContainer.state.pageLimitationL || 50}
  82. dropdownItemSize={[20, 50, 100, 200]}
  83. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationL}
  84. />
  85. <PagingSizeUncontrolledDropdown
  86. label={t('admin:customize_settings.function_options.list_num_xl')}
  87. desc={t('admin:customize_settings.function_options.list_num_desc_xl')}
  88. toggleLabel={adminCustomizeContainer.state.pageLimitationXL || 20}
  89. dropdownItemSize={[5, 10, 20, 50, 100]}
  90. onChangeDropdownItem={adminCustomizeContainer.switchPageListLimitationXL}
  91. />
  92. <div className="form-group row">
  93. <div className="offset-md-3 col-md-6 text-left">
  94. <CustomizeFunctionOption
  95. optionId="isEnabledStaleNotification"
  96. label={t('admin:customize_settings.function_options.stale_notification')}
  97. isChecked={adminCustomizeContainer.state.isEnabledStaleNotification}
  98. onChecked={() => { adminCustomizeContainer.switchEnableStaleNotification() }}
  99. >
  100. <p className="form-text text-muted">
  101. {t('admin:customize_settings.function_options.stale_notification_desc')}
  102. </p>
  103. </CustomizeFunctionOption>
  104. </div>
  105. </div>
  106. <div className="form-group row">
  107. <div className="offset-md-3 col-md-6 text-left">
  108. <CustomizeFunctionOption
  109. optionId="isAllReplyShown"
  110. label={t('admin:customize_settings.function_options.show_all_reply_comments')}
  111. isChecked={adminCustomizeContainer.state.isAllReplyShown || false}
  112. onChecked={() => { adminCustomizeContainer.switchIsAllReplyShown() }}
  113. >
  114. <p className="form-text text-muted">
  115. {t('admin:customize_settings.function_options.show_all_reply_comments_desc')}
  116. </p>
  117. </CustomizeFunctionOption>
  118. </div>
  119. </div>
  120. <div className="form-group row">
  121. <div className="offset-md-3 col-md-6 text-left">
  122. <CustomizeFunctionOption
  123. optionId="isSearchScopeChildrenAsDefault"
  124. label={t('admin:customize_settings.function_options.select_search_scope_children_as_default')}
  125. isChecked={adminCustomizeContainer.state.isSearchScopeChildrenAsDefault || false}
  126. onChecked={() => { adminCustomizeContainer.switchIsSearchScopeChildrenAsDefault() }}
  127. >
  128. <p className="form-text text-muted">
  129. {t('admin:customize_settings.function_options.select_search_scope_children_as_default_desc')}
  130. </p>
  131. </CustomizeFunctionOption>
  132. </div>
  133. </div>
  134. <AdminUpdateButtonRow onClick={onClickSubmit} disabled={adminCustomizeContainer.state.retrieveError != null} />
  135. </div>
  136. </div>
  137. </React.Fragment>
  138. );
  139. };
  140. const CustomizeFunctionSettingWrapper = withUnstatedContainers(CustomizeFunctionSetting, [AdminCustomizeContainer]);
  141. export default CustomizeFunctionSettingWrapper;