audit-log.page.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { useHydrateAtoms } from 'jotai/utils';
  2. import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
  3. import dynamic from 'next/dynamic';
  4. import type { SupportedActionType } from '~/interfaces/activity';
  5. import type { CrowiRequest } from '~/interfaces/crowi-request';
  6. import { activityExpirationSecondsAtom, auditLogAvailableActionsAtom, auditLogEnabledAtom } from '~/states/global';
  7. import type { NextPageWithLayout } from '../_app.page';
  8. import { mergeGetServerSidePropsResults } from '../utils/server-side-props';
  9. import type { AdminCommonProps } from './_shared';
  10. import { createAdminPageLayout, getServerSideAdminCommonProps } from './_shared';
  11. const AuditLogManagement = dynamic(() => import('~/client/components/Admin/AuditLogManagement').then(mod => mod.AuditLogManagement), { ssr: false });
  12. type PageProps = {
  13. auditLogEnabled: boolean,
  14. activityExpirationSeconds: number,
  15. auditLogAvailableActions: SupportedActionType[],
  16. };
  17. type Props = AdminCommonProps & PageProps;
  18. const AdminAuditLogPage: NextPageWithLayout<Props> = (props: Props) => {
  19. // hydrate
  20. useHydrateAtoms([
  21. [auditLogEnabledAtom, props.auditLogEnabled],
  22. [activityExpirationSecondsAtom, props.activityExpirationSeconds],
  23. [auditLogAvailableActionsAtom, props.auditLogAvailableActions],
  24. ], { dangerouslyForceHydrate: true });
  25. return <AuditLogManagement />;
  26. };
  27. // No extra containers required presently; values injected directly via props + existing universal stores inside component children
  28. AdminAuditLogPage.getLayout = createAdminPageLayout<Props>({
  29. title: (_p, t) => t('audit_log_management.audit_log'),
  30. });
  31. // Extend common SSR to inject audit log specific server configs
  32. export const getServerSideProps: GetServerSideProps<Props> = async(context: GetServerSidePropsContext) => {
  33. const baseResult = await getServerSideAdminCommonProps(context);
  34. const req: CrowiRequest = context.req as CrowiRequest;
  35. const { crowi } = req;
  36. const { configManager, activityService } = crowi;
  37. // Build audit-log specific result fragment
  38. const auditLogPropsFragment = {
  39. props: {
  40. auditLogEnabled: configManager.getConfig('app:auditLogEnabled'),
  41. activityExpirationSeconds: configManager.getConfig('app:activityExpirationSeconds'),
  42. auditLogAvailableActions: activityService.getAvailableActions(false),
  43. },
  44. } satisfies { props: PageProps };
  45. return mergeGetServerSidePropsResults(baseResult, auditLogPropsFragment);
  46. };
  47. export default AdminAuditLogPage;