audit-log.page.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import type {
  2. GetServerSideProps,
  3. GetServerSidePropsContext,
  4. NextPage,
  5. } from 'next';
  6. import dynamic from 'next/dynamic';
  7. import Head from 'next/head';
  8. import { useTranslation } from 'next-i18next';
  9. import type { SupportedActionType } from '~/interfaces/activity';
  10. import type { CrowiRequest } from '~/interfaces/crowi-request';
  11. import type { CommonProps } from '~/pages/utils/commons';
  12. import { generateCustomTitle } from '~/pages/utils/commons';
  13. import {
  14. useActivityExpirationSeconds,
  15. useAuditLogAvailableActions,
  16. useAuditLogEnabled,
  17. useCurrentUser,
  18. } from '~/stores-universal/context';
  19. import { retrieveServerSideProps } from '../../utils/admin-page-util';
  20. const AdminLayout = dynamic(() => import('~/components/Layout/AdminLayout'), {
  21. ssr: false,
  22. });
  23. const AuditLogManagement = dynamic(
  24. () =>
  25. import('~/client/components/Admin/AuditLogManagement').then(
  26. (mod) => mod.AuditLogManagement,
  27. ),
  28. { ssr: false },
  29. );
  30. const ForbiddenPage = dynamic(
  31. () =>
  32. import('~/client/components/Admin/ForbiddenPage').then(
  33. (mod) => mod.ForbiddenPage,
  34. ),
  35. { ssr: false },
  36. );
  37. type Props = CommonProps & {
  38. auditLogEnabled: boolean;
  39. activityExpirationSeconds: number;
  40. auditLogAvailableActions: SupportedActionType[];
  41. };
  42. const AdminAuditLogPage: NextPage<Props> = (props) => {
  43. const { t } = useTranslation('admin');
  44. useAuditLogEnabled(props.auditLogEnabled);
  45. useActivityExpirationSeconds(props.activityExpirationSeconds);
  46. useAuditLogAvailableActions(props.auditLogAvailableActions);
  47. useCurrentUser(props.currentUser ?? null);
  48. const title = t('audit_log_management.audit_log');
  49. const headTitle = generateCustomTitle(props, title);
  50. if (props.isAccessDeniedForNonAdminUser) {
  51. return <ForbiddenPage />;
  52. }
  53. return (
  54. <AdminLayout componentTitle={title}>
  55. <Head>
  56. <title>{headTitle}</title>
  57. </Head>
  58. <AuditLogManagement />
  59. </AdminLayout>
  60. );
  61. };
  62. const injectServerConfigurations = async (
  63. context: GetServerSidePropsContext,
  64. props: Props,
  65. ): Promise<void> => {
  66. const req: CrowiRequest = context.req as CrowiRequest;
  67. const { crowi } = req;
  68. const { activityService } = crowi;
  69. props.auditLogEnabled = crowi.configManager.getConfig('app:auditLogEnabled');
  70. props.activityExpirationSeconds = crowi.configManager.getConfig(
  71. 'app:activityExpirationSeconds',
  72. );
  73. props.auditLogAvailableActions = activityService.getAvailableActions(false);
  74. };
  75. export const getServerSideProps: GetServerSideProps = async (
  76. context: GetServerSidePropsContext,
  77. ) => {
  78. const props = await retrieveServerSideProps(
  79. context,
  80. injectServerConfigurations,
  81. );
  82. return props;
  83. };
  84. export default AdminAuditLogPage;