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.

237 lines
6.2KB

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