Skip to content

Instantly share code, notes, and snippets.

@Kimserey
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kimserey/4a42856afc5e29a75103 to your computer and use it in GitHub Desktop.
Save Kimserey/4a42856afc5e29a75103 to your computer and use it in GitHub Desktop.
Websharper Router test
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