import { Grid } from "antd";
import { Loader } from "components/Loader/Loader";
import { PrivateRoute } from "components/privateRoute/PrivateRoute";
import { AppLayout } from "layouts";
import HeaderMenuDrawer from "layouts/app/HeaderMenuDrawer";
import AddressPage from "pages/address/page";
import CardDetailsPage from "pages/CardDetails/CardDetails";
import CartPage from "pages/cart/page";
import CheckoutPage from "pages/checkout/page";
import EGiftCardsPage from "pages/EGiftCards/EGiftCards";
import { Error400Page, ErrorPage } from "pages/errors";
import LoginPage from "pages/login/page";
import MenuPage from "pages/menu/page";
import OrderDetails from "pages/order/components/OrderDetails";
import OrderPage from "pages/order/page";
import OrdersPage from "pages/orders/page";
import OtpPage from "pages/otp/page";
import ProductDetailPage from "pages/product/page";
import RedeemPage from "pages/redeem/page";
import RestaurantPage from "pages/restaurant/page";
import SearchPage from "pages/search/page";
import SplitBillPage from "pages/split-bill/page";
import React, { ReactNode, Suspense, useEffect } from "react";
import { createHashRouter, useLocation } from "react-router-dom";
const { useBreakpoint } = Grid;
// Custom scroll restoration function
export const ScrollToTop: React.FC = () => {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo({
top: 0,
left: 0,
behavior: "smooth",
}); // Scroll to the top when the location changes
}, [pathname]);
return null; // This component doesn't render anything
};
type PageProps = {
children: ReactNode;
};
// Create an HOC to wrap your route components with ScrollToTop
const PageWrapper = ({ children }: PageProps) => {
const { xs, sm, md } = useBreakpoint();
return (
}>
{children}
{(xs || sm || md) && }
);
};
export const router = createHashRouter([
{
path: "/",
element: } />,
errorElement: ,
},
{
// subdomain is unique string identifier for each restaurant
path: "/:subdomain",
element: } />,
errorElement: ,
children: [
{
path: "menu",
element: } />,
errorElement: ,
},
{
path: "cart",
element: (
}
/>
),
errorElement: ,
},
{
path: "address",
element: } />,
errorElement: ,
},
{
path: "checkout",
element: } />,
errorElement: ,
},
{
path: "split-bill",
element: } />,
errorElement: ,
},
{
path: "product/:productId",
element: } />,
errorElement: ,
},
{
path: "search",
element: } />,
errorElement: ,
},
{
path: "orders/:orderId?",
element: (
}
/>
),
errorElement: ,
},
{
path: "login",
element: } />,
errorElement: ,
},
{
path: "otp",
element: } />,
errorElement: ,
},
{
path: "order/:orderId",
element: } />,
errorElement: ,
},
{
path: "order/details/:orderId",
element: } />,
errorElement: ,
},
// {
// path: "pay",
// element: } />,
// errorElement: ,
// },
{
path: "e-gift-cards",
element: } />,
errorElement: ,
},
{
path: "card-details",
element: } />,
errorElement: ,
},
{
path: "gift/redeem/:voucherId",
element: } />,
errorElement: ,
},
],
},
{
path: "errors",
errorElement: ,
children: [
{
path: "400",
element: (
),
},
],
},
]);
export default router;