2
0

data-transfer.page.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { useEffect, useMemo } from 'react';
  2. import type {
  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 type { Container } from 'unstated';
  9. import { Provider } from 'unstated';
  10. import type { CrowiRequest } from '~/interfaces/crowi-request';
  11. import type { CommonProps } from '~/pages/utils/commons';
  12. import { useCurrentUser, useGrowiCloudUri } from '~/stores-universal/context';
  13. import { retrieveServerSideProps } from '../../utils/admin-page-util';
  14. const AdminLayout = dynamic(() => import('~/components/Layout/AdminLayout'), { ssr: false });
  15. const G2GDataTransferPage = dynamic(() => import('~/client/components/Admin/G2GDataTransfer'), { ssr: false });
  16. const ForbiddenPage = dynamic(() => import('~/client/components/Admin/ForbiddenPage').then(mod => mod.ForbiddenPage), { ssr: false });
  17. type Props = CommonProps;
  18. const DataTransferPage: NextPage<Props> = (props) => {
  19. const { t } = useTranslation('commons');
  20. useCurrentUser(props.currentUser ?? null);
  21. useGrowiCloudUri(props.growiCloudUri);
  22. const title = t('g2g_data_transfer.data_transfer');
  23. const injectableContainers: Container<any>[] = useMemo(() => [], []);
  24. useEffect(() => {
  25. (async() => {
  26. const AdminAppContainer = (await import('~/client/services/AdminAppContainer')).default;
  27. const adminAppContainer = new AdminAppContainer();
  28. injectableContainers.push(adminAppContainer);
  29. })();
  30. }, [injectableContainers]);
  31. if (props.isAccessDeniedForNonAdminUser) {
  32. return <ForbiddenPage />;
  33. }
  34. return (
  35. <Provider inject={[...injectableContainers]}>
  36. <AdminLayout componentTitle={title}>
  37. <Head>
  38. <title>{title}</title>
  39. </Head>
  40. <G2GDataTransferPage />
  41. </AdminLayout>
  42. </Provider>
  43. );
  44. };
  45. const injectServerConfigurations = async(context: GetServerSidePropsContext, props: Props): Promise<void> => {
  46. const req: CrowiRequest = context.req as CrowiRequest;
  47. const { crowi } = req;
  48. props.growiCloudUri = await crowi.configManager.getConfig('crowi', 'app:growiCloudUri');
  49. };
  50. export const getServerSideProps: GetServerSideProps = async(context: GetServerSidePropsContext) => {
  51. const props = await retrieveServerSideProps(context, injectServerConfigurations);
  52. return props;
  53. };
  54. export default DataTransferPage;