notification.page.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { useEffect, useMemo } from 'react';
  2. import type {
  3. GetServerSideProps,
  4. GetServerSidePropsContext,
  5. NextPage,
  6. } from 'next';
  7. import dynamic from 'next/dynamic';
  8. import Head from 'next/head';
  9. import { useTranslation } from 'next-i18next';
  10. import type { Container } from 'unstated';
  11. import { Provider } from 'unstated';
  12. import type { CommonProps } from '~/pages/utils/commons';
  13. import { generateCustomTitle } from '~/pages/utils/commons';
  14. import { useCurrentUser } from '~/stores-universal/context';
  15. import { retrieveServerSideProps } from '../../utils/admin-page-util';
  16. const AdminLayout = dynamic(() => import('~/components/Layout/AdminLayout'), {
  17. ssr: false,
  18. });
  19. const NotificationSetting = dynamic(
  20. () => import('~/client/components/Admin/Notification/NotificationSetting'),
  21. { ssr: false },
  22. );
  23. const ForbiddenPage = dynamic(
  24. () =>
  25. import('~/client/components/Admin/ForbiddenPage').then(
  26. (mod) => mod.ForbiddenPage,
  27. ),
  28. { ssr: false },
  29. );
  30. const AdminExternalNotificationPage: NextPage<CommonProps> = (props) => {
  31. const { t } = useTranslation('admin');
  32. useCurrentUser(props.currentUser ?? null);
  33. const componentTitle = t('external_notification.external_notification');
  34. const pageTitle = generateCustomTitle(props, componentTitle);
  35. const injectableContainers: Container<any>[] = useMemo(() => [], []);
  36. useEffect(() => {
  37. (async () => {
  38. const AdminNotificationContainer = (
  39. await import('~/client/services/AdminNotificationContainer')
  40. ).default;
  41. const adminNotificationContainer = new AdminNotificationContainer();
  42. injectableContainers.push(adminNotificationContainer);
  43. })();
  44. }, [injectableContainers]);
  45. if (props.isAccessDeniedForNonAdminUser) {
  46. return <ForbiddenPage />;
  47. }
  48. return (
  49. <Provider inject={[...injectableContainers]}>
  50. <AdminLayout componentTitle={componentTitle}>
  51. <Head>
  52. <title>{pageTitle}</title>
  53. </Head>
  54. <NotificationSetting />
  55. </AdminLayout>
  56. </Provider>
  57. );
  58. };
  59. export const getServerSideProps: GetServerSideProps = async (
  60. context: GetServerSidePropsContext,
  61. ) => {
  62. const props = await retrieveServerSideProps(context);
  63. return props;
  64. };
  65. export default AdminExternalNotificationPage;