You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

219 lines
5.9KB

  1. import { PageID } from "codes/page";
  2. import { UserRole } from "codes/user";
  3. import LoadingScreen from "components/LoadingScreen";
  4. import { AppContextProvider } from "contexts/AppContext";
  5. import useAuth from "hooks/useAuth";
  6. import DashboardLayout from "layouts/dashbord";
  7. import SimpleLayout from "layouts/simple";
  8. import { ElementType, Suspense, lazy, useMemo } from "react";
  9. import { RouteObject, useRoutes } from "react-router-dom";
  10. import { getRoute } from "./path";
  11. const Loadable = (Component: ElementType) => (props: any) => {
  12. return (
  13. <Suspense fallback={<LoadingScreen />}>
  14. <Component {...props} />
  15. </Suspense>
  16. );
  17. };
  18. const AuthRoutes = (): RouteObject => ({
  19. element: <SimpleLayout />,
  20. children: [
  21. {
  22. path: getRoute(PageID.LOGIN),
  23. element: <Login />,
  24. },
  25. {
  26. path: getRoute(PageID.LOGOUT),
  27. element: <Logout />,
  28. },
  29. {
  30. path: getRoute(PageID.CLEAR_CHANGE_CONTRACT),
  31. element: <ClearContract />,
  32. },
  33. ],
  34. });
  35. const AppRoutes = (): RouteObject => ({
  36. element: (
  37. <AppContextProvider>
  38. <SimpleLayout />
  39. </AppContextProvider>
  40. ),
  41. children: [
  42. {
  43. path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_INDEX),
  44. element: <ReceiptIssuingOrder />,
  45. },
  46. {
  47. path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_MAIL_ORDER),
  48. element: <MailOrder />,
  49. },
  50. {
  51. path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_EMAIL_ORDER),
  52. element: <EmailOrder />,
  53. },
  54. ],
  55. });
  56. const DashboardRoutes = (): RouteObject => {
  57. const { canAccess } = useAuth();
  58. const allChildren = [
  59. {
  60. pageId: PageID.DASHBOARD_OVERVIEW,
  61. element: <Dashboard />,
  62. },
  63. {
  64. pageId: PageID.DASHBOARD_CONTRACT_LIST,
  65. element: <ContractList />,
  66. },
  67. {
  68. pageId: PageID.DASHBOARD_CONTRACT_DETAIL,
  69. element: <ContractDetail />,
  70. },
  71. {
  72. pageId: PageID.DASHBOARD_CONTRACT_CREATE,
  73. element: <ContractCreate />,
  74. },
  75. {
  76. pageId: PageID.DASHBOARD_USE_SUMMARY_LIST_BY_CONTRACT,
  77. element: <UseSummaryByContractList />,
  78. },
  79. {
  80. pageId: PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_CREATE_CUSTOM_HELLO_TECHNO,
  81. element: <ReceiptIssuingOrderCreateHelloTechno />,
  82. },
  83. {
  84. pageId: PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_LIST_CUSTOM_HELLO_TECHNO,
  85. element: <ReceiptIssuingOrderListHelloTechno />,
  86. },
  87. {
  88. pageId: PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_DETAIL_CUSTOM_HELLO_TECHNO,
  89. element: <ReceiptIssuingOrderDetailHelloTechno />,
  90. },
  91. {
  92. pageId: PageID.DASHBOARD_USE_SUMMARY_LIST_CUSTOM_HELLO_TECHNO,
  93. element: <UseSummaryListHelloTechno />,
  94. },
  95. {
  96. pageId: PageID.DASHBOARD_USE_SUMMARY_DETAIL_CUSTOM_HELLO_TECHNO,
  97. element: <UseSummaryDetailHelloTechno />,
  98. },
  99. {
  100. pageId: PageID.DASHBOARD_LOGIN_USER_LIST,
  101. element: <LoginUserList />,
  102. },
  103. {
  104. pageId: PageID.DASHBOARD_LOGIN_USER_CREATE,
  105. element: <LoginUserCreate />,
  106. },
  107. {
  108. pageId: PageID.DASHBOARD_LOGIN_USER_CHANGE_PASSWORD,
  109. element: <ChangePassword />,
  110. },
  111. ];
  112. const children: RouteObject[] = useMemo(() => {
  113. return allChildren
  114. .filter(({ pageId }) => canAccess(pageId))
  115. .map(({ pageId, ...others }) => ({
  116. ...others,
  117. path: getRoute(pageId),
  118. }));
  119. }, [canAccess]);
  120. return {
  121. element: <DashboardLayout />,
  122. children,
  123. };
  124. };
  125. export function Routes() {
  126. const { initialized } = useAuth();
  127. return useRoutes([
  128. AuthRoutes(),
  129. AppRoutes(),
  130. DashboardRoutes(),
  131. {
  132. path: "403",
  133. element: <Page403 />,
  134. },
  135. {
  136. path: "*",
  137. element: initialized ? <Page404 /> : <LoadingScreen />,
  138. },
  139. ]);
  140. }
  141. // 認証関連 -------------------------------
  142. const Login = Loadable(lazy(() => import("pages/auth/login")));
  143. const Logout = Loadable(lazy(() => import("pages/auth/logout")));
  144. const ClearContract = Loadable(lazy(() => import("pages/auth/clear-contract")));
  145. // App ---------------------------
  146. const ReceiptIssuingOrder = Loadable(
  147. lazy(() => import("pages/app/ReceiptIssuingOrder"))
  148. );
  149. const MailOrder = Loadable(lazy(() => import("pages/app/MailOrder")));
  150. const EmailOrder = Loadable(lazy(() => import("pages/app/EmailOrder")));
  151. //ダッシュボード ----------------------------
  152. const Dashboard = Loadable(lazy(() => import("pages/dashboard")));
  153. // 契約関連
  154. const ContractList = Loadable(
  155. lazy(() => import("pages/dashboard/contract/list"))
  156. );
  157. const ContractDetail = Loadable(
  158. lazy(() => import("pages/dashboard/contract/detail"))
  159. );
  160. const ContractCreate = Loadable(
  161. lazy(() => import("pages/dashboard/contract/create"))
  162. );
  163. // 領収証発行依頼
  164. const ReceiptIssuingOrderCreateHelloTechno = Loadable(
  165. lazy(
  166. () =>
  167. import("pages/dashboard/receipt-issuing-order/custom/hello-techno/create")
  168. )
  169. );
  170. const ReceiptIssuingOrderListHelloTechno = Loadable(
  171. lazy(
  172. () =>
  173. import("pages/dashboard/receipt-issuing-order/custom/hello-techno/list")
  174. )
  175. );
  176. const ReceiptIssuingOrderDetailHelloTechno = Loadable(
  177. lazy(
  178. () =>
  179. import("pages/dashboard/receipt-issuing-order/custom/hello-techno/detail")
  180. )
  181. );
  182. // 利用実績関連
  183. const UseSummaryByContractList = Loadable(
  184. lazy(() => import("pages/dashboard/use-summary/list"))
  185. );
  186. const UseSummaryListHelloTechno = Loadable(
  187. lazy(() => import("pages/dashboard/use-summary/custom/hello-techno/list"))
  188. );
  189. const UseSummaryDetailHelloTechno = Loadable(
  190. lazy(() => import("pages/dashboard/use-summary/custom/hello-techno/detail"))
  191. );
  192. // ログインユーザー管理
  193. const LoginUserList = Loadable(
  194. lazy(() => import("pages/dashboard/login-user/list"))
  195. );
  196. const LoginUserCreate = Loadable(
  197. lazy(() => import("pages/dashboard/login-user/create"))
  198. );
  199. const ChangePassword = Loadable(
  200. lazy(() => import("pages/dashboard/login-user/change-password"))
  201. );
  202. // その他 ---------------------------------
  203. const Page403 = Loadable(lazy(() => import("pages/common/Page403")));
  204. const Page404 = Loadable(lazy(() => import("pages/common/Page404")));