2018-03-02 10:32:09 -07:00
|
|
|
import { App } from "./app";
|
|
|
|
import { crashPage } from "./crash_page";
|
2018-03-05 13:13:03 -07:00
|
|
|
import { RouterState, RedirectFunction, PlainRoute, RouteComponent } from "react-router";
|
2018-03-02 10:32:09 -07:00
|
|
|
|
|
|
|
/** These methods are a way to determine how to load certain modules
|
|
|
|
* based on the device (mobile or desktop) for optimization/css purposes.
|
|
|
|
*/
|
2018-03-04 15:56:10 -07:00
|
|
|
export function maybeReplaceDesignerModules(next: RouterState,
|
|
|
|
replace: RedirectFunction) {
|
2018-03-02 10:32:09 -07:00
|
|
|
if (next.location.pathname === "/app/designer") {
|
|
|
|
replace(`${next.location.pathname}/plants`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-05 13:13:03 -07:00
|
|
|
function page(path: string, getter: () => Promise<RouteComponent>): PlainRoute {
|
2018-03-02 13:52:23 -07:00
|
|
|
return {
|
|
|
|
path,
|
2018-03-05 13:13:03 -07:00
|
|
|
getComponent(_, cb) {
|
|
|
|
const ok = (component: RouteComponent) => cb(undefined, component);
|
2018-03-04 10:06:16 -07:00
|
|
|
const no = (e: object) => cb(undefined, crashPage(e));
|
|
|
|
return getter().then(ok, no);
|
2018-03-02 13:52:23 -07:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2018-03-05 13:13:03 -07:00
|
|
|
const controlsRoute: PlainRoute =
|
2018-03-02 14:07:13 -07:00
|
|
|
page("app/controls", async () => (await import("./controls/controls")).Controls);
|
2018-03-02 13:52:23 -07:00
|
|
|
|
2018-03-05 13:13:03 -07:00
|
|
|
export const designerRoutes: PlainRoute = {
|
2018-03-02 13:52:23 -07:00
|
|
|
path: "app/designer",
|
|
|
|
onEnter: maybeReplaceDesignerModules,
|
2018-03-05 13:13:03 -07:00
|
|
|
getComponent(_, cb) {
|
2018-03-02 13:52:23 -07:00
|
|
|
import("./farm_designer/index")
|
|
|
|
.then(module => cb(undefined, module.FarmDesigner))
|
2018-03-02 10:32:09 -07:00
|
|
|
.catch((e: object) => cb(undefined, crashPage(e)));
|
2018-03-02 13:52:23 -07:00
|
|
|
},
|
|
|
|
childRoutes: [
|
|
|
|
page("plants",
|
|
|
|
async () => (await import("./farm_designer/plants/plant_inventory")).Plants),
|
|
|
|
page("plants/crop_search",
|
|
|
|
async () => (await import("./farm_designer/plants/crop_catalog")).CropCatalog),
|
|
|
|
page("plants/crop_search/:crop",
|
|
|
|
async () => (await import("./farm_designer/plants/crop_info")).CropInfo),
|
|
|
|
page("plants/crop_search/:crop/add",
|
|
|
|
async () => (await 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),
|
|
|
|
page("plants/:plant_id",
|
|
|
|
async () => (await import("./farm_designer/plants/plant_info")).PlantInfo),
|
|
|
|
page("plants/:plant_id/edit",
|
|
|
|
async () => (await import("./farm_designer/plants/edit_plant_info")).EditPlantInfo),
|
|
|
|
page("farm_events",
|
|
|
|
async () => (await import("./farm_designer/farm_events/farm_events")).FarmEvents),
|
|
|
|
page("farm_events/add",
|
|
|
|
async () => (await 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),
|
|
|
|
]
|
2018-03-02 10:32:09 -07:00
|
|
|
};
|
|
|
|
|
2018-03-05 13:13:03 -07:00
|
|
|
export const topLevelRoutes: PlainRoute = {
|
2018-03-02 10:32:09 -07:00
|
|
|
component: App,
|
|
|
|
indexRoute: controlsRoute,
|
|
|
|
childRoutes: [
|
2018-03-02 13:52:23 -07:00
|
|
|
page("app/account", async () => (await import("./account/index")).Account),
|
2018-03-02 10:32:09 -07:00
|
|
|
controlsRoute,
|
2018-03-02 13:52:23 -07:00
|
|
|
page("app/device", async () => (await import("./devices/devices")).Devices),
|
|
|
|
page("app/farmware", async () => (await import("./farmware/index")).FarmwarePage),
|
|
|
|
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),
|
|
|
|
designerRoutes,
|
2018-03-02 10:32:09 -07:00
|
|
|
]
|
|
|
|
};
|