Last active
August 29, 2015 14:27
-
-
Save Kimserey/4a42856afc5e29a75103 to your computer and use it in GitHub Desktop.
Websharper Router test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace UINextRouterTest | |
open WebSharper | |
open WebSharper.JavaScript | |
open WebSharper.JQuery | |
open WebSharper.UI.Next | |
open WebSharper.UI.Next.Html | |
open WebSharper.UI.Next.Client | |
[<JavaScript>] | |
module Client = | |
type PageTy = Home | About | |
type Page = | |
{ mutable PageTy: PageTy | |
mutable PageName: string | |
mutable RouteId: RouteId } | |
let HomePage go = | |
Doc.Concat [ | |
h1 [text "Home"] | |
p [ text "Blabla some stuff in the home" ] | |
Doc.Link "link to go to about" [] (fun _ -> go About) ] | |
let AboutPage go = | |
Doc.Concat [ | |
h1 [text "About"] | |
p [ text "Blabla about stuff about in the about" ] | |
Doc.Link "link to go to home" [] (fun _ -> go Home) ] | |
let unitRouteMap = | |
RouteMap.Create (fun () -> []) (fun _ -> ()) | |
let HomeRouter = | |
Router.Route unitRouteMap () (fun id v -> | |
{ PageTy = Home | |
PageName = "Home" | |
RouteId = id } | |
) | |
let AboutRouter = | |
Router.Route unitRouteMap () (fun id v -> | |
{ PageTy = About | |
PageName = "About" | |
RouteId = id } | |
) | |
let SiteRouter = | |
Router.Merge [ | |
Router.Prefix "home" HomeRouter | |
Router.Prefix "account" AboutRouter | |
] | |
let SetPageFor = function | |
| Home -> { PageTy = Home | |
PageName = "Home" | |
RouteId = Unchecked.defaultof<_> } | |
| About -> { PageTy = About | |
PageName = "Account" | |
RouteId = Unchecked.defaultof<_> } | |
let Main = | |
let router = Router.Install (fun pg -> pg.RouteId) SiteRouter | |
let renderMain v = | |
View.FromVar v | |
|> View.Map (fun (pg: Page) -> | |
match pg.PageTy with | |
| Home -> HomePage (fun ty -> Var.Set v (SetPageFor ty)) | |
| About -> AboutPage (fun ty -> Var.Set v (SetPageFor ty)) | |
) | |
|> Doc.EmbedView | |
Doc.RunById "main" (renderMain router) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment