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.

243 lines
7.9KB

  1. import { ページアクセス許可判定 } from "auth/route";
  2. import QRサービス券駐車場グループ管理ContextProvider from "contexts/page/dashboard/parking/QRサービス券駐車場グループ管理Context";
  3. import 店舗詳細ContextProvider from "contexts/page/dashboard/shop/店舗詳細Context";
  4. import AuthGuard from "guards/AuthGuard";
  5. import useAuth from "hooks/useAuth";
  6. import DashboardLayout from "layouts/dashbord";
  7. import { PageID, TabID } from "pages";
  8. import { lazy, useMemo } from "react";
  9. import { Outlet, RouteObject } from "react-router-dom";
  10. import { Loadable } from "routes";
  11. import { getPath } from "routes/path";
  12. export default function DashboardRoutes(): RouteObject[] {
  13. const { currentRole } = useAuth();
  14. const children: RouteObject[] = useMemo(() => {
  15. const Enpty = Loadable(lazy(() => import("pages/dashboard/empty")));
  16. const Dashboard = Loadable(lazy(() => import("pages/dashboard")));
  17. const 成り代わり終了 = Loadable(
  18. lazy(() => import("pages/dashboard/成り代わり終了"))
  19. );
  20. const サービス券発行用QRコード = Loadable(
  21. lazy(() => import("pages/dashboard/qr-service/サービス券発行"))
  22. );
  23. const サービス券利用履歴 = Loadable(
  24. lazy(() => import("pages/dashboard/qr-service/利用履歴一覧"))
  25. );
  26. const QRサービス券駐車場管理一覧 = Loadable(
  27. lazy(
  28. () => import("pages/dashboard/qr-service/QRサービス券駐車場管理/一覧")
  29. )
  30. );
  31. const QRサービス券駐車場管理新規登録 = Loadable(
  32. lazy(
  33. () =>
  34. import("pages/dashboard/qr-service/QRサービス券駐車場管理/新規登録")
  35. )
  36. );
  37. const QRサービス券駐車場管理詳細 = Loadable(
  38. lazy(
  39. () => import("pages/dashboard/qr-service/QRサービス券駐車場管理/詳細")
  40. )
  41. );
  42. const 顧客ログインユーザ一覧 = Loadable(
  43. lazy(() => import("pages/dashboard/login-user/顧客ログインユーザ一覧"))
  44. );
  45. const 顧客ログインユーザ新規登録 = Loadable(
  46. lazy(
  47. () => import("pages/dashboard/login-user/顧客ログインユーザ新規登録")
  48. )
  49. );
  50. const 店舗ログインユーザ一覧 = Loadable(
  51. lazy(() => import("pages/dashboard/login-user/店舗/一覧"))
  52. );
  53. const 店舗ログインユーザ新規登録 = Loadable(
  54. lazy(() => import("pages/dashboard/login-user/店舗/新規登録"))
  55. );
  56. const 店舗新規登録 = Loadable(
  57. lazy(() => import("pages/dashboard/shop/店舗新規登録"))
  58. );
  59. const 店舗一覧 = Loadable(
  60. lazy(() => import("pages/dashboard/shop/店舗一覧"))
  61. );
  62. const 店舗詳細 = Loadable(
  63. lazy(() => import("pages/dashboard/shop/店舗詳細/詳細"))
  64. );
  65. const 店舗詳細基本設定 = Loadable(
  66. lazy(() => import("pages/dashboard/shop/店舗詳細/基本設定"))
  67. );
  68. const 店舗詳細QR取得設定 = Loadable(
  69. lazy(() => import("pages/dashboard/shop/店舗詳細/QR取得設定"))
  70. );
  71. const 店舗詳細QR認証設定 = Loadable(
  72. lazy(() => import("pages/dashboard/shop/店舗詳細/QR認証設定"))
  73. );
  74. const allChildren: {
  75. pageId: PageID;
  76. ele: RouteObject;
  77. }[] = [
  78. {
  79. pageId: PageID.DASHBOARD_ENPTY,
  80. ele: {
  81. element: <Enpty />,
  82. path: getPath(PageID.DASHBOARD_ENPTY),
  83. },
  84. },
  85. {
  86. pageId: PageID.DASHBOARD_OVERVIEW,
  87. ele: {
  88. element: <Dashboard />,
  89. path: getPath(PageID.DASHBOARD_OVERVIEW),
  90. },
  91. },
  92. {
  93. pageId: PageID.成り代わり終了,
  94. ele: {
  95. element: <成り代わり終了 />,
  96. path: getPath(PageID.成り代わり終了),
  97. },
  98. },
  99. {
  100. pageId: PageID.ログインユーザ_顧客一覧,
  101. ele: {
  102. element: <顧客ログインユーザ一覧 />,
  103. path: getPath(PageID.ログインユーザ_顧客一覧),
  104. },
  105. },
  106. {
  107. pageId: PageID.ログインユーザ_顧客新規登録,
  108. ele: {
  109. element: <顧客ログインユーザ新規登録 />,
  110. path: getPath(PageID.ログインユーザ_顧客新規登録),
  111. },
  112. },
  113. {
  114. pageId: PageID.ログインユーザ_店舗一覧,
  115. ele: {
  116. element: <店舗ログインユーザ一覧 />,
  117. path: getPath(PageID.ログインユーザ_店舗一覧),
  118. },
  119. },
  120. {
  121. pageId: PageID.ログインユーザ_店舗新規登録,
  122. ele: {
  123. element: <店舗ログインユーザ新規登録 />,
  124. path: getPath(PageID.ログインユーザ_店舗新規登録),
  125. },
  126. },
  127. {
  128. pageId: PageID.店舗新規登録,
  129. ele: {
  130. element: <店舗新規登録 />,
  131. path: getPath(PageID.店舗新規登録),
  132. },
  133. },
  134. {
  135. pageId: PageID.店舗一覧,
  136. ele: {
  137. element: <店舗一覧 />,
  138. path: getPath(PageID.店舗一覧),
  139. },
  140. },
  141. {
  142. pageId: PageID.店舗詳細,
  143. ele: {
  144. element: (
  145. <店舗詳細ContextProvider>
  146. <Outlet />
  147. </店舗詳細ContextProvider>
  148. ),
  149. children: [
  150. {
  151. element: <店舗詳細 />,
  152. path: getPath([PageID.店舗詳細, TabID.店舗詳細_メイン]),
  153. },
  154. {
  155. element: <店舗詳細基本設定 />,
  156. path: getPath([PageID.店舗詳細, TabID.店舗詳細_基本設定]),
  157. },
  158. {
  159. element: <店舗詳細QR認証設定 />,
  160. path: getPath([PageID.店舗詳細, TabID.店舗詳細_QR認証設定]),
  161. },
  162. {
  163. element: <店舗詳細QR取得設定 />,
  164. path: getPath([PageID.店舗詳細, TabID.店舗詳細_QR取得設定]),
  165. },
  166. ],
  167. },
  168. },
  169. {
  170. pageId: PageID.QRサービス券駐車場グループ管理,
  171. ele: {
  172. element: (
  173. <QRサービス券駐車場グループ管理ContextProvider>
  174. <Outlet />
  175. </QRサービス券駐車場グループ管理ContextProvider>
  176. ),
  177. children: [
  178. {
  179. element: <QRサービス券駐車場管理一覧 />,
  180. path: getPath([
  181. PageID.QRサービス券駐車場グループ管理,
  182. TabID.QRサービス券駐車場グループ管理_一覧,
  183. ]),
  184. },
  185. {
  186. element: <QRサービス券駐車場管理新規登録 />,
  187. path: getPath([
  188. PageID.QRサービス券駐車場グループ管理,
  189. TabID.QRサービス券駐車場グループ管理_新規登録,
  190. ]),
  191. },
  192. {
  193. element: <QRサービス券駐車場管理詳細 />,
  194. path: getPath([
  195. PageID.QRサービス券駐車場グループ管理,
  196. TabID.QRサービス券駐車場グループ管理_詳細,
  197. ]),
  198. },
  199. ],
  200. },
  201. },
  202. {
  203. pageId: PageID.サービス券発行用QRコード,
  204. ele: {
  205. element: <サービス券発行用QRコード />,
  206. path: getPath(PageID.サービス券発行用QRコード),
  207. },
  208. },
  209. {
  210. pageId: PageID.利用履歴,
  211. ele: {
  212. element: <サービス券利用履歴 />,
  213. path: getPath(PageID.利用履歴),
  214. },
  215. },
  216. ];
  217. return allChildren
  218. .filter(({ pageId }) => {
  219. if (currentRole === null) {
  220. return false;
  221. }
  222. return ページアクセス許可判定(currentRole, pageId);
  223. })
  224. .map(({ ele }) => ele);
  225. }, [currentRole]);
  226. return [
  227. {
  228. element: (
  229. <AuthGuard>
  230. <DashboardLayout />
  231. </AuthGuard>
  232. ),
  233. children: children,
  234. },
  235. ];
  236. }