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: ,
},
],
});
const AppRoutes = (): RouteObject => ({
element: (
),
children: [
{
path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_INDEX),
element: ,
},
{
path: getRoute(PageID.APP_RECEIPT_ISSUING_ORDER_MAIL_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_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_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")));
// App ---------------------------
const ReceiptIssuingOrder = Loadable(
lazy(() => import("pages/app/ReceiptIssuingOrder"))
);
const MailOrder = Loadable(lazy(() => import("pages/app/MailOrder")));
//ダッシュボード ----------------------------
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 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")));