AuditLogSettings.tsx 2.8 KB

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