~app/routes.tsx
.ts
TypeScript
(application/typescript)
// 1st-party
import type { IRouteParams } from "@ethicdevs/react-monolith";
import { AppRouter, AppRouterGroup, Router } from "@ethicdevs/react-monolith";
// 3rd-party
import React from "react";
// app
/* controllers */
import * as HomeController from "./controllers/HomeController";
import * as ThemeController from "./controllers/ThemeController";

export enum AppRoute {
  HOME = "home",
  THEME_SET = "theme.set",
}

export interface AppRoutesParams extends IRouteParams {
  [AppRoute.HOME]: undefined;
  [AppRoute.THEME_SET]: {
    themeScheme: string;
  };
}

const RootAppRouter: AppRouter = () => (
  <Router.Root>
    <></>
    <Router.Group type={AppRouterGroup.API}>
      <Router.Route
        name={AppRoute.HOME}
        method={"GET"}
        path={"/"}
        handler={HomeController.getHomeView}
      />
      <Router.Route
        name={AppRoute.THEME_SET}
        method={"GET"}
        path={"/theme/:themeScheme"}
        handler={ThemeController.getTheme}
      />
    </Router.Group>
  </Router.Root>
);

export default RootAppRouter;