diff --git a/webpack/route_config.ts b/webpack/route_config.ts index 53a21d9b1..af1e5d345 100644 --- a/webpack/route_config.ts +++ b/webpack/route_config.ts @@ -1,6 +1,6 @@ import { App } from "./app"; import { crashPage } from "./crash_page"; -import { RouterState, RedirectFunction, PlainRoute, RouteComponent } from "react-router"; +import { RouterState, RedirectFunction, PlainRoute } from "react-router"; /** These methods are a way to determine how to load certain modules * based on the device (mobile or desktop) for optimization/css purposes. @@ -12,19 +12,24 @@ export function maybeReplaceDesignerModules(next: RouterState, } } -function page(path: string, getter: () => Promise): PlainRoute { +/** Create a react router config for a specific route. */ +function page(path: string, + getter: () => Promise, + key: keyof T): PlainRoute { + return { path, getComponent(_, cb) { - const ok = (component: RouteComponent) => cb(undefined, component); + const ok = (mod: T) => cb(undefined, mod[key] as any); const no = (e: object) => cb(undefined, crashPage(e)); - getter().then(ok, no); + return getter().then(ok, no); } }; } const controlsRoute: PlainRoute = - page("app/controls", async () => (await import("./controls/controls")).Controls); + page("app/controls", + () => import("./controls/controls"), "Controls"); export const designerRoutes: PlainRoute = { path: "app/designer", @@ -36,28 +41,41 @@ export const designerRoutes: PlainRoute = { }, childRoutes: [ page("plants", - async () => (await import("./farm_designer/plants/plant_inventory")).Plants), + () => import("./farm_designer/plants/plant_inventory"), + "Plants"), page("plants/crop_search", - async () => (await import("./farm_designer/plants/crop_catalog")).CropCatalog), + () => import("./farm_designer/plants/crop_catalog"), + "CropCatalog"), page("plants/crop_search/:crop", - async () => (await import("./farm_designer/plants/crop_info")).CropInfo), + () => import("./farm_designer/plants/crop_info"), + "CropInfo"), page("plants/crop_search/:crop/add", - async () => (await import("./farm_designer/plants/add_plant")).AddPlant), + () => import("./farm_designer/plants/add_plant"), + "AddPlant"), page("plants/select", - async () => (await import("./farm_designer/plants/select_plants")).SelectPlants), - page("plants/move_to", async () => (await import("./farm_designer/plants/move_to")).MoveTo), - page("plants/create_point", - async () => (await import("./farm_designer/plants/create_points")).CreatePoints), + () => import("./farm_designer/plants/select_plants"), + "SelectPlants"), + page("plants/move_to", + () => import("./farm_designer/plants/move_to"), + "MoveTo"), + page("plants", + () => import("./farm_designer/plants/create_points"), + "CreatePoints"), page("plants/:plant_id", - async () => (await import("./farm_designer/plants/plant_info")).PlantInfo), + () => import("./farm_designer/plants/plant_info"), + "PlantInfo"), page("plants/:plant_id/edit", - async () => (await import("./farm_designer/plants/edit_plant_info")).EditPlantInfo), + () => import("./farm_designer/plants/edit_plant_info"), + "EditPlantInfo"), page("farm_events", - async () => (await import("./farm_designer/farm_events/farm_events")).FarmEvents), + () => import("./farm_designer/farm_events/farm_events"), + "FarmEvents"), page("farm_events/add", - async () => (await import("./farm_designer/farm_events/add_farm_event")).AddFarmEvent), + () => import("./farm_designer/farm_events/add_farm_event"), + "AddFarmEvent"), page("farm_events/:farm_event_id", - async () => (await import("./farm_designer/farm_events/edit_farm_event")).EditFarmEvent), + () => import("./farm_designer/farm_events/edit_farm_event"), + "EditFarmEvent"), ] }; @@ -65,17 +83,37 @@ export const topLevelRoutes: PlainRoute = { component: App, indexRoute: controlsRoute, childRoutes: [ - page("app/account", async () => (await import("./account/index")).Account), + page("app/account", + () => import("./account/index"), + "Account"), controlsRoute, - page("app/device", async () => (await import("./devices/devices")).Devices), - page("app/farmware", async () => (await import("./farmware/index")).FarmwarePage), + page("app/device", + () => import("./devices/devices"), + "Devices"), + page("app/farmware", + () => import("./farmware/index"), + "FarmwarePage"), designerRoutes, - page("app/regimens", async () => (await import("./regimens/index")).Regimens), - page("app/regimens/:regimen", async () => (await import("./regimens/index")).Regimens), - page("app/sequences", async () => (await import("./sequences/sequences")).Sequences), - page("app/sequences/:sequence", async () => (await import("./sequences/sequences")).Sequences), - page("app/tools", async () => (await import("./tools/index")).Tools), - page("app/logs", async () => (await import("./logs/index")).Logs), - page("*", async () => (await import("./404")).FourOhFour), + page("app/regimens", + () => import("./regimens/index"), + "Regimens"), + page("app/regimens/:regimen", + () => import("./regimens/index"), + "Regimens"), + page("app/sequences", + () => import("./sequences/sequences"), + "Sequences"), + page("app/sequences/:sequence", + () => import("./sequences/sequences"), + "Sequences"), + page("app/tools", + () => import("./tools/index"), + "Tools"), + page("app/logs", + () => import("./logs/index"), + "Logs"), + page("*", + () => import("./404"), + "FourOhFour"), ] };