index.page.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { isClient } from '@growi/core/dist/utils';
  2. import {
  3. NextPage, GetServerSideProps, GetServerSidePropsContext,
  4. } from 'next';
  5. import { useTranslation } from 'next-i18next';
  6. import dynamic from 'next/dynamic';
  7. import Head from 'next/head';
  8. import { Container, Provider } from 'unstated';
  9. import AdminHomeContainer from '~/client/services/AdminHomeContainer';
  10. import { CrowiRequest } from '~/interfaces/crowi-request';
  11. import { CommonProps, generateCustomTitle } from '~/pages/utils/commons';
  12. import {
  13. useCurrentUser, useGrowiCloudUri, useGrowiAppIdForGrowiCloud,
  14. } from '~/stores/context';
  15. import { retrieveServerSideProps } from '../../utils/admin-page-util';
  16. const AdminLayout = dynamic(() => import('~/components/Layout/AdminLayout'), { ssr: false });
  17. const AdminHome = dynamic(() => import('~/components/Admin/AdminHome/AdminHome'), { ssr: false });
  18. const ForbiddenPage = dynamic(() => import('~/components/Admin/ForbiddenPage').then(mod => mod.ForbiddenPage), { ssr: false });
  19. type Props = CommonProps & {
  20. nodeVersion: string,
  21. npmVersion: string,
  22. yarnVersion: string,
  23. installedPlugins: any,
  24. growiCloudUri: string,
  25. growiAppIdForGrowiCloud: number,
  26. };
  27. const AdminHomepage: NextPage<Props> = (props) => {
  28. useCurrentUser(props.currentUser ?? null);
  29. useGrowiCloudUri(props.growiCloudUri);
  30. useGrowiAppIdForGrowiCloud(props.growiAppIdForGrowiCloud);
  31. const { t } = useTranslation('admin');
  32. const title = generateCustomTitle(props, t('wiki_management_homepage'));
  33. const injectableContainers: Container<any>[] = [];
  34. if (isClient()) {
  35. const adminHomeContainer = new AdminHomeContainer();
  36. injectableContainers.push(adminHomeContainer);
  37. }
  38. if (props.isAccessDeniedForNonAdminUser) {
  39. return <ForbiddenPage />;
  40. }
  41. return (
  42. <Provider inject={[...injectableContainers]}>
  43. <AdminLayout componentTitle={title}>
  44. <Head>
  45. <title>{title}</title>
  46. </Head>
  47. <AdminHome
  48. nodeVersion={props.nodeVersion}
  49. npmVersion={props.npmVersion}
  50. yarnVersion={props.yarnVersion}
  51. installedPlugins={props.installedPlugins}
  52. />
  53. </AdminLayout>
  54. </Provider>
  55. );
  56. };
  57. const injectServerConfigurations = async(context: GetServerSidePropsContext, props: Props): Promise<void> => {
  58. const req: CrowiRequest = context.req as CrowiRequest;
  59. const { crowi } = req;
  60. props.nodeVersion = crowi.runtimeVersions.versions.node ? crowi.runtimeVersions.versions.node.version.version : null;
  61. props.npmVersion = crowi.runtimeVersions.versions.npm ? crowi.runtimeVersions.versions.npm.version.version : null;
  62. props.yarnVersion = crowi.runtimeVersions.versions.yarn ? crowi.runtimeVersions.versions.yarn.version.version : null;
  63. props.growiCloudUri = await crowi.configManager.getConfig('crowi', 'app:growiCloudUri');
  64. props.growiAppIdForGrowiCloud = await crowi.configManager.getConfig('crowi', 'app:growiAppIdForCloud');
  65. };
  66. export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
  67. const props = await retrieveServerSideProps(context, injectServerConfigurations);
  68. return props;
  69. };
  70. export default AdminHomepage;