The first page moved over! Note that this broke navigation on the rest of the app, so don't deploy this until we're done! The reason it broke was that we had to migrate GlobalHeader and GlobalFooter to the Next.js link & router stuff too, or else it crashed because it wasn't in a react-router-dom context.
144 lines
4.3 KiB
JavaScript
144 lines
4.3 KiB
JavaScript
import React from "react";
|
|
import { Box } from "@chakra-ui/react";
|
|
import {
|
|
BrowserRouter as Router,
|
|
Switch,
|
|
Route,
|
|
useLocation,
|
|
} from "react-router-dom";
|
|
|
|
import PageLayout from "./PageLayout";
|
|
import WardrobePageLayout from "./WardrobePage/WardrobePageLayout";
|
|
import { loadable } from "./util";
|
|
|
|
const ConversionPage = loadable(() => import("./ConversionPage"));
|
|
const HomePage = loadable(() => import("./HomePage"));
|
|
const InternalAssetImagePage = loadable(() =>
|
|
import("./InternalAssetImagePage")
|
|
);
|
|
const ItemSearchPage = loadable(() => import("./ItemSearchPage"));
|
|
const ItemPage = loadable(() => import("./ItemPage"));
|
|
const ItemTradesOfferingPage = loadable(() =>
|
|
import("./ItemTradesPage").then((m) => m.ItemTradesOfferingPage)
|
|
);
|
|
const ItemTradesSeekingPage = loadable(() =>
|
|
import("./ItemTradesPage").then((m) => m.ItemTradesSeekingPage)
|
|
);
|
|
const ModelingPage = loadable(() => import("./ModelingPage"));
|
|
const SupportPetAppearancesPage = loadable(() =>
|
|
import("./SupportPetAppearancesPage")
|
|
);
|
|
const UserItemListsIndexPage = loadable(() =>
|
|
import("./UserItemListsIndexPage")
|
|
);
|
|
const UserItemListPage = loadable(() => import("./UserItemListPage"));
|
|
const UserOutfitsPage = loadable(() => import("./UserOutfitsPage"));
|
|
const WardrobePage = loadable(() => import("./WardrobePage"), {
|
|
fallback: <WardrobePageLayout />,
|
|
});
|
|
|
|
// ItemPage and ItemSearchPage need to share a search toolbar, so here it is!
|
|
// It'll load in dynamically like the page elements, with a hacky fallback to
|
|
// take up 40px of height until it loads.
|
|
//
|
|
// There very well be a better way to encapsulate this! It's not *great* to
|
|
// have this here. I just don't wanna over abstract it just yet 😅
|
|
const ItemSearchPageToolbar = loadable(
|
|
() => import("./components/ItemSearchPageToolbar"),
|
|
{ fallback: <Box height="40px" /> }
|
|
);
|
|
|
|
/**
|
|
* App is the entry point of our application. There's not a ton of exciting
|
|
* stuff happening here, mostly just setting up some globals and theming!
|
|
*
|
|
* To really dive into the code, try going down into a page component!
|
|
*/
|
|
function App() {
|
|
return (
|
|
<Router>
|
|
<ScrollToTop />
|
|
|
|
<Switch>
|
|
<Route path="/items/search/:query?">
|
|
<PageLayout>
|
|
<ItemSearchPageToolbar marginBottom="6" />
|
|
<ItemSearchPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/items/:itemId/trades/offering">
|
|
<PageLayout>
|
|
<ItemTradesOfferingPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/items/:itemId/trades/seeking">
|
|
<PageLayout>
|
|
<ItemTradesSeekingPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/items/:itemId">
|
|
<PageLayout>
|
|
<ItemSearchPageToolbar marginBottom="8" />
|
|
<ItemPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/outfits/new">
|
|
<WardrobePage />
|
|
</Route>
|
|
<Route path="/outfits/:id">
|
|
<WardrobePage />
|
|
</Route>
|
|
<Route path="/user/:userId/lists/:ownsOrWants(owns|wants)/:listId">
|
|
<PageLayout>
|
|
<UserItemListPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/user/:userId/lists">
|
|
<PageLayout>
|
|
<UserItemListsIndexPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/your-outfits">
|
|
<PageLayout>
|
|
<UserOutfitsPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/modeling">
|
|
<PageLayout>
|
|
<ModelingPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/conversion">
|
|
<PageLayout>
|
|
<ConversionPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/support/petAppearances">
|
|
<PageLayout>
|
|
<SupportPetAppearancesPage />
|
|
</PageLayout>
|
|
</Route>
|
|
<Route path="/internal/assetImage">
|
|
<InternalAssetImagePage />
|
|
</Route>
|
|
<Route path="/">
|
|
<PageLayout hideHomeLink>
|
|
<HomePage />
|
|
</PageLayout>
|
|
</Route>
|
|
</Switch>
|
|
</Router>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ScrollToTop scrolls to the top of the page when you navigate.
|
|
* Copied from https://reactrouter.com/web/guides/scroll-restoration/scroll-to-top.
|
|
*/
|
|
function ScrollToTop() {
|
|
const { pathname } = useLocation();
|
|
React.useEffect(() => window.scrollTo(0, 0), [pathname]);
|
|
return null;
|
|
}
|
|
|
|
export default App;
|