Yuki Takei 7 miesięcy temu
rodzic
commit
023ff5a620

+ 3 - 3
apps/app/src/pages/admin/_shared/AdminPageFrame.tsx

@@ -1,11 +1,11 @@
-import type {, JSX } from 'react';
+import type { JSX } from 'react';
 import React from 'react';
 import React from 'react';
 
 
 import dynamic from 'next/dynamic';
 import dynamic from 'next/dynamic';
 import Head from 'next/head';
 import Head from 'next/head';
-
 import { Provider } from 'unstated';
 import { Provider } from 'unstated';
-import { AdminPageFrameProps } from './types';
+
+import type { AdminPageFrameProps } from './types';
 
 
 // Dynamic imports to avoid SSR issues with admin-only components
 // Dynamic imports to avoid SSR issues with admin-only components
 const AdminLayout = dynamic(() => import('~/components/Layout/AdminLayout'), { ssr: false });
 const AdminLayout = dynamic(() => import('~/components/Layout/AdminLayout'), { ssr: false });

+ 2 - 6
apps/app/src/pages/admin/_shared/admin-ssr.ts → apps/app/src/pages/admin/_shared/get-server-side-common-props.ts

@@ -1,13 +1,9 @@
-import type { GetServerSideProps, GetServerSidePropsContext, GetServerSidePropsResult } from 'next';
+import type { GetServerSideProps, GetServerSidePropsContext } from 'next';
 
 
-import type { CommonInitialProps, CommonEachProps } from '../../common-props';
 import { getServerSideCommonInitialProps, getServerSideCommonEachProps, getServerSideI18nProps } from '../../common-props';
 import { getServerSideCommonInitialProps, getServerSideCommonEachProps, getServerSideI18nProps } from '../../common-props';
 import { mergeGetServerSidePropsResults } from '../../utils/server-side-props';
 import { mergeGetServerSidePropsResults } from '../../utils/server-side-props';
 
 
-/** Base admin page props (allowed or forbidden). */
-export type AdminCommonProps = CommonInitialProps & CommonEachProps & {
-  isAccessDeniedForNonAdminUser: boolean;
-};
+import type { AdminCommonProps } from './types';
 
 
 /**
 /**
  * Build common admin SSR props (merges common initial/each/i18n and computes admin flag).
  * Build common admin SSR props (merges common initial/each/i18n and computes admin flag).

+ 4 - 0
apps/app/src/pages/admin/_shared/index.ts

@@ -0,0 +1,4 @@
+export type * from './types';
+export { getServerSideAdminCommonProps } from './get-server-side-common-props';
+export { createAdminPageLayout } from './layout';
+export { useUnstatedContainers } from './use-unstated-container';

+ 3 - 4
apps/app/src/pages/admin/_shared/createAdminPageLayout.tsx → apps/app/src/pages/admin/_shared/layout.tsx

@@ -6,9 +6,8 @@ import { useTranslation } from 'next-i18next';
 import { useCustomTitle } from '~/pages/utils/page-title-customization';
 import { useCustomTitle } from '~/pages/utils/page-title-customization';
 
 
 import { AdminPageFrame } from './AdminPageFrame';
 import { AdminPageFrame } from './AdminPageFrame';
-import type { AdminCommonProps } from './admin-ssr';
-import type { AnyUnstatedContainer } from './types';
-import { useAdminContainers } from './useAdminContainers';
+import type { AnyUnstatedContainer, AdminCommonProps } from './types';
+import { useUnstatedContainers } from './use-unstated-container';
 
 
 export interface AdminLayoutOptions<P extends AdminCommonProps> {
 export interface AdminLayoutOptions<P extends AdminCommonProps> {
   title: string | ((props: P, t: (k: string) => string) => string);
   title: string | ((props: P, t: (k: string) => string) => string);
@@ -24,7 +23,7 @@ export function createAdminPageLayout<P extends AdminCommonProps>(options: Admin
       const title = useCustomTitle(rawTitle);
       const title = useCustomTitle(rawTitle);
 
 
       const factories = useMemo(() => options.containerFactories ?? [], []);
       const factories = useMemo(() => options.containerFactories ?? [], []);
-      const containers = useAdminContainers(factories);
+      const containers = useUnstatedContainers(factories);
 
 
       return (
       return (
         <AdminPageFrame
         <AdminPageFrame

+ 6 - 0
apps/app/src/pages/admin/_shared/types.ts

@@ -2,6 +2,12 @@ import type { ReactNode } from 'react';
 
 
 import type { Container } from 'unstated';
 import type { Container } from 'unstated';
 
 
+import type { CommonEachProps, CommonInitialProps } from '~/pages/common-props';
+
+export type AdminCommonProps = CommonInitialProps & CommonEachProps & {
+  isAccessDeniedForNonAdminUser: boolean;
+};
+
 export type AnyUnstatedContainer = Container<Record<string, unknown>>;
 export type AnyUnstatedContainer = Container<Record<string, unknown>>;
 
 
 export interface AdminPageFrameProps {
 export interface AdminPageFrameProps {

+ 2 - 2
apps/app/src/pages/admin/_shared/useAdminContainers.ts → apps/app/src/pages/admin/_shared/use-unstated-container.ts

@@ -6,7 +6,7 @@ import type { AnyUnstatedContainer } from './types';
  * Helper hook to dynamically load and instantiate unstated containers for admin pages.
  * Helper hook to dynamically load and instantiate unstated containers for admin pages.
  * Pass an array of async factory functions returning container instances.
  * Pass an array of async factory functions returning container instances.
  */
  */
-export const useAdminContainers = (factories: Array<() => Promise<AnyUnstatedContainer>>): AnyUnstatedContainer[] => {
+export const useUnstatedContainers = (factories: Array<() => Promise<AnyUnstatedContainer>>): AnyUnstatedContainer[] => {
   const [containers, setContainers] = useState<AnyUnstatedContainer[]>([]);
   const [containers, setContainers] = useState<AnyUnstatedContainer[]>([]);
 
 
   useEffect(() => {
   useEffect(() => {
@@ -21,4 +21,4 @@ export const useAdminContainers = (factories: Array<() => Promise<AnyUnstatedCon
   return containers;
   return containers;
 };
 };
 
 
-export default useAdminContainers;
+export default useUnstatedContainers;

+ 2 - 3
apps/app/src/pages/admin/notification.page.tsx

@@ -3,9 +3,8 @@ import dynamic from 'next/dynamic';
 
 
 import type { NextPageWithLayout } from '../_app.page';
 import type { NextPageWithLayout } from '../_app.page';
 
 
-import type { AdminCommonProps } from './_shared/admin-ssr';
-import { getServerSideAdminCommonProps } from './_shared/admin-ssr';
-import { createAdminPageLayout } from './_shared/createAdminPageLayout';
+import type { AdminCommonProps } from './_shared';
+import { createAdminPageLayout, getServerSideAdminCommonProps } from './_shared';
 
 
 const NotificationSetting = dynamic(() => import('~/client/components/Admin/Notification/NotificationSetting'), { ssr: false });
 const NotificationSetting = dynamic(() => import('~/client/components/Admin/Notification/NotificationSetting'), { ssr: false });