import { PageID } from "codes/page"; import { UserRole } from "codes/user"; import LoadingScreen from "components/LoadingScreen"; import { AppContextProvider } from "contexts/AppContext"; import useAuth from "hooks/useAuth"; import DashboardLayout from "layouts/dashbord"; import SimpleLayout from "layouts/simple"; import { ElementType, Suspense, lazy, useMemo } from "react"; import { RouteObject, useRoutes } from "react-router-dom"; import { getRoute } from "./path"; const Loadable = (Component: ElementType) => (props: any) => { return ( }> ); }; const AuthRoutes = (): RouteObject => ({ element: , children: [ { path: getRoute(PageID.LOGIN), element: , }, { path: getRoute(PageID.LOGOUT), element: , }, { path: getRoute(PageID.CLEAR_CHANGE_CONTRACT), element: , }, ], }); const AppRoutes = (): RouteObject => ({ element: ( ), children: [ { path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_INDEX), element: , }, { path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_MAIL_ORDER), element: , }, { path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_EMAIL_ORDER), element: , }, ], }); const DashboardRoutes = (): RouteObject => { const { canAccess } = useAuth(); const allChildren = [ { pageId: PageID.DASHBOARD_OVERVIEW, element: , }, { pageId: PageID.DASHBOARD_CONTRACT_LIST, element: , }, { pageId: PageID.DASHBOARD_CONTRACT_DETAIL, element: , }, { pageId: PageID.DASHBOARD_CONTRACT_CREATE, element: , }, { pageId: PageID.DASHBOARD_USE_SUMMARY_LIST_BY_CONTRACT, element: , }, { pageId: PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_CREATE_CUSTOM_HELLO_TECHNO, element: , }, { pageId: PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_LIST_CUSTOM_HELLO_TECHNO, element: , }, { pageId: PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_DETAIL_CUSTOM_HELLO_TECHNO, element: , }, { pageId: PageID.DASHBOARD_USE_SUMMARY_LIST_CUSTOM_HELLO_TECHNO, element: , }, { pageId: PageID.DASHBOARD_USE_SUMMARY_DETAIL_CUSTOM_HELLO_TECHNO, element: , }, { pageId: PageID.DASHBOARD_LOGIN_USER_LIST, element: , }, { pageId: PageID.DASHBOARD_LOGIN_USER_CREATE, element: , }, { pageId: PageID.DASHBOARD_LOGIN_USER_CHANGE_PASSWORD, element: , }, ]; const children: RouteObject[] = useMemo(() => { return allChildren .filter(({ pageId }) => canAccess(pageId)) .map(({ pageId, ...others }) => ({ ...others, path: getRoute(pageId), })); }, [canAccess]); return { element: , children, }; }; export function Routes() { const { initialized } = useAuth(); return useRoutes([ AuthRoutes(), AppRoutes(), DashboardRoutes(), { path: "403", element: , }, { path: "*", element: initialized ? : , }, ]); } // 認証関連 ------------------------------- const Login = Loadable(lazy(() => import("pages/auth/login"))); const Logout = Loadable(lazy(() => import("pages/auth/logout"))); const ClearContract = Loadable(lazy(() => import("pages/auth/clear-contract"))); // App --------------------------- const ReceiptIssuingOrder = Loadable( lazy(() => import("pages/app/ReceiptIssuingOrder")) ); const MailOrder = Loadable(lazy(() => import("pages/app/MailOrder"))); const EmailOrder = Loadable(lazy(() => import("pages/app/EmailOrder"))); //ダッシュボード ---------------------------- const Dashboard = Loadable(lazy(() => import("pages/dashboard"))); // 契約関連 const ContractList = Loadable( lazy(() => import("pages/dashboard/contract/list")) ); const ContractDetail = Loadable( lazy(() => import("pages/dashboard/contract/detail")) ); const ContractCreate = Loadable( lazy(() => import("pages/dashboard/contract/create")) ); // 領収証発行依頼 const ReceiptIssuingOrderCreateHelloTechno = Loadable( lazy( () => import("pages/dashboard/receipt-issuing-order/custom/hello-techno/create") ) ); const ReceiptIssuingOrderListHelloTechno = Loadable( lazy( () => import("pages/dashboard/receipt-issuing-order/custom/hello-techno/list") ) ); const ReceiptIssuingOrderDetailHelloTechno = Loadable( lazy( () => import("pages/dashboard/receipt-issuing-order/custom/hello-techno/detail") ) ); // 利用実績関連 const UseSummaryByContractList = Loadable( lazy(() => import("pages/dashboard/use-summary/list")) ); const UseSummaryListHelloTechno = Loadable( lazy(() => import("pages/dashboard/use-summary/custom/hello-techno/list")) ); const UseSummaryDetailHelloTechno = Loadable( lazy(() => import("pages/dashboard/use-summary/custom/hello-techno/detail")) ); // ログインユーザー管理 const LoginUserList = Loadable( lazy(() => import("pages/dashboard/login-user/list")) ); const LoginUserCreate = Loadable( lazy(() => import("pages/dashboard/login-user/create")) ); const ChangePassword = Loadable( lazy(() => import("pages/dashboard/login-user/change-password")) ); // その他 --------------------------------- const Page403 = Loadable(lazy(() => import("pages/common/Page403"))); const Page404 = Loadable(lazy(() => import("pages/common/Page404")));