AuditLogSettings.tsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import React, { FC, useState } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { Collapse } from 'reactstrap';
  4. import { AllSupportedActions } from '~/interfaces/activity';
  5. import { useActivityExpirationSeconds, useAuditLogAvailableActions } from '~/stores/context';
  6. export const AuditLogSettings: FC = () => {
  7. const { t } = useTranslation();
  8. const [isExpandActionList, setIsExpandActionList] = useState(false);
  9. const { data: activityExpirationSecondsData } = useActivityExpirationSeconds();
  10. const activityExpirationSeconds = activityExpirationSecondsData != null ? activityExpirationSecondsData : 2592000;
  11. const { data: availableActionsData } = useAuditLogAvailableActions();
  12. const availableActions = availableActionsData != null ? availableActionsData : [];
  13. return (
  14. <>
  15. <h4 className="mt-4">{t('admin:audit_log_management.activity_expiration_date')}</h4>
  16. <p className="form-text text-muted">
  17. {t('admin:audit_log_management.activity_expiration_date_explain')}
  18. </p>
  19. <p className="alert alert-warning col-6">
  20. <span className="material-symbols-outlined">error</span>
  21. <b>FIXED</b><br />
  22. <b
  23. // eslint-disable-next-line react/no-danger
  24. dangerouslySetInnerHTML={{
  25. __html: t('admin:audit_log_management.fixed_by_env_var',
  26. { key: 'ACTIVITY_EXPIRATION_SECONDS', value: activityExpirationSeconds }),
  27. }}
  28. />
  29. </p>
  30. <h4 className="mt-4">
  31. {t('admin:audit_log_management.available_action_list')}
  32. <span className="badge rounded-pill bg-primary ms-2">
  33. {`${availableActions.length} / ${AllSupportedActions.length}`}
  34. </span>
  35. <a
  36. className="ms-2"
  37. href={t('admin:audit_log_management.docs_url.log_type')}
  38. target="_blank"
  39. rel="noopener noreferrer"
  40. >
  41. <span className="material-symbols-outlined" aria-hidden="true">help</span>
  42. </a>
  43. </h4>
  44. <p className="form-text text-muted">
  45. {t('admin:audit_log_management.available_action_list_explain')}
  46. </p>
  47. <p className="mt-1">
  48. <button type="button" className="btn btn-link p-0" aria-expanded="false" onClick={() => setIsExpandActionList(!isExpandActionList)}>
  49. <i className={`fa fa-fw fa-arrow-right ${isExpandActionList ? 'fa-rotate-90' : ''}`}></i>
  50. { t('admin:audit_log_management.action_list') }
  51. </button>
  52. </p>
  53. <Collapse isOpen={isExpandActionList}>
  54. <ul className="list-group">
  55. { availableActions.map(action => (
  56. <li key={action} className="list-group-item">{t(`admin:audit_log_action.${action}`)}</li>
  57. )) }
  58. </ul>
  59. </Collapse>
  60. </>
  61. );
  62. };