type route = | Model(string) | Home | NotFound; let routeToPath = route => switch (route) { | Model(i) => "/m/" ++ i | Home => "/" | _ => "/" }; module Models = { let all = [| EAFunds.Interface.model, GlobalCatastrophe.Interface.model, Human.Interface.model, |]; let getById = id => E.A.getBy(all, r => r.id == id); }; module Menu = { module Styles = { open Css; let menu = style([ position(`relative), marginTop(em(0.25)), marginBottom(em(0.25)), selector( "a", [ borderRadius(em(0.25)), display(`inlineBlock), backgroundColor(`hex("eee")), padding(em(1.)), cursor(`pointer), ], ), selector("a:hover", [backgroundColor(`hex("bfcad4"))]), selector("a:hover", [backgroundColor(`hex("bfcad4"))]), selector( "a:not(:first-child):not(:last-child)", [marginRight(em(0.25)), marginLeft(em(0.25))], ), ]); }; module Item = { [@react.component] let make = (~href, ~children) => { { e->ReactEvent.Synthetic.preventDefault; ReasonReactRouter.push(href); }}> children ; }; }; [@react.component] let make = () => {
{"Home" |> E.ste} {Models.all |> E.A.fmap((model: Prop.Model.t) => { {model.name |> E.ste} }) |> ReasonReact.array}
; }; }; [@react.component] let make = () => { let url = ReasonReactRouter.useUrl(); let routing = switch (url.path) { | ["m", modelId] => Model(modelId) | [] => Home | _ => NotFound };
{switch (routing) { | Model(n) => switch (Models.getById(n)) { | Some(model) => | None =>
{"Page is not found" |> E.ste}
} | Home =>
{"Welcome" |> E.ste}
| _ =>
{"Page is not found" |> E.ste}
}}
; };