index.page.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { useHydrateAtoms } from 'jotai/utils';
  2. import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
  3. import dynamic from 'next/dynamic';
  4. import type { CrowiRequest } from '~/interfaces/crowi-request';
  5. import {
  6. growiCloudUriAtom,
  7. growiAppIdForGrowiCloudAtom,
  8. } from '~/states/global';
  9. import type { NextPageWithLayout } from '../_app.page';
  10. import { mergeGetServerSidePropsResults } from '../utils/server-side-props';
  11. import type { AdminCommonProps } from './_shared';
  12. import { createAdminPageLayout, getServerSideAdminCommonProps } from './_shared';
  13. const AdminHome = dynamic(() => import('~/client/components/Admin/AdminHome/AdminHome'), { ssr: false });
  14. type ExtraProps = {
  15. growiCloudUri?: string,
  16. growiAppIdForGrowiCloud?: number,
  17. };
  18. type Props = AdminCommonProps & ExtraProps;
  19. // eslint-disable-next-line react/prop-types
  20. const AdminHomepage: NextPageWithLayout<Props> = ({ growiCloudUri, growiAppIdForGrowiCloud }) => {
  21. // Hydrate atoms with fragment values (idempotent if already set by common props)
  22. useHydrateAtoms([
  23. [growiCloudUriAtom, growiCloudUri],
  24. [growiAppIdForGrowiCloudAtom, growiAppIdForGrowiCloud],
  25. ], { dangerouslyForceHydrate: true });
  26. return <AdminHome />;
  27. };
  28. AdminHomepage.getLayout = createAdminPageLayout<Props>({
  29. title: (_p, t) => t('wiki_management_homepage'),
  30. containerFactories: [
  31. async() => {
  32. const AdminHomeContainer = (await import('~/client/services/AdminHomeContainer')).default;
  33. return new AdminHomeContainer();
  34. },
  35. ],
  36. });
  37. export const getServerSideProps: GetServerSideProps<Props> = async(context: GetServerSidePropsContext) => {
  38. const baseResult = await getServerSideAdminCommonProps(context);
  39. if ('redirect' in baseResult || 'notFound' in baseResult) return baseResult;
  40. const req: CrowiRequest = context.req as CrowiRequest;
  41. const { crowi } = req;
  42. const fragment = {
  43. props: {
  44. growiCloudUri: crowi.configManager.getConfig('app:growiCloudUri'),
  45. growiAppIdForGrowiCloud: crowi.configManager.getConfig('app:growiAppIdForCloud'),
  46. },
  47. } satisfies { props: ExtraProps };
  48. return mergeGetServerSidePropsResults(baseResult, fragment);
  49. };
  50. export default AdminHomepage;