@@ -10,9 +10,9 @@ open Page
1010open Shared
1111
1212type PageTab =
13- | Home of Home.Model
14- | Login of Login.Model
15- | Wishlist of WishList.Model
13+ | Home
14+ | Login
15+ | Wishlist of UserData
1616 | NotFound
1717
1818type User =
@@ -22,107 +22,51 @@ type User =
2222type Model = { Page: PageTab ; User: User }
2323
2424type Msg =
25- | HomePageMsg of Home.Msg
26- | LoginPageMsg of Login.Msg
27- | WishlistMsg of WishList.Msg
2825 | UrlChanged of string list
2926 | OnSessionChange
3027 | Logout
3128
32- let wishListApi token =
33- let bearer = $" Bearer {token}"
34-
35- Remoting.createApi ()
36- |> Remoting.withAuthorizationHeader bearer
37- |> Remoting.withRouteBuilder Route.builder
38- |> Remoting.buildProxy< IWishListApi>
3929
4030let guestApi =
4131 Remoting.createApi ()
4232 |> Remoting.withRouteBuilder Route.builder
4333 |> Remoting.buildProxy< IGuestApi>
4434
4535let initFromUrl model url =
36+ let loggedInUser =
37+ Session.loadUser () |> Option.map User |> Option.defaultValue Guest
38+
4639 match url with
4740 | [] ->
48- let homeModel , homeMsg = Home.init guestApi
49-
50- let model = {
51- Page = Home homeModel
52- User = model.User
53- }
54-
55- let cmd = homeMsg |> Cmd.map HomePageMsg
56- model, cmd
41+ let model = { Page = Home; User = loggedInUser }
42+ model, Cmd.none
5743 | [ " login" ] ->
58- let loginModel , loginMsg = Login.init ()
59-
60- let model = {
61- Page = Login loginModel
62- User = model.User
63- }
64-
65- let cmd = loginMsg |> Cmd.map LoginPageMsg
66- model, cmd
44+ let model = { Page = Login; User = loggedInUser }
45+ model, Cmd.none
6746 | [ " wishlist" ] ->
68- match model.User with
47+ match loggedInUser with
6948 | User user ->
70- let wishlistModel , wishlistMsg =
71- WishList.init ( wishListApi user.Token) user.UserName
72-
7349 let model = {
74- Page = Wishlist wishlistModel
75- User = model.User
50+ Page = Wishlist user
51+ User = loggedInUser
7652 }
7753
78- let cmd = wishlistMsg |> Cmd.map WishlistMsg
79- model, cmd
54+ model, Cmd.none
8055 | Guest -> model, Cmd.navigate " login"
81- | _ -> { Page = NotFound; User = model.User }, Cmd.none
56+ | _ -> { Page = NotFound; User = loggedInUser }, Cmd.none
8257
8358let init () =
84- let model , _ = Home.init guestApi
8559 let user = Session.loadUser () |> Option.map User |> Option.defaultValue Guest
8660
87- Router.currentUrl () |> initFromUrl { Page = Home model ; User = user }
61+ Router.currentUrl () |> initFromUrl { Page = Home; User = user }
8862
8963let update msg model =
90- match model.Page, msg with
91- | Home homeModel, HomePageMsg homeMsg ->
92- let newModel , cmd = Home.update homeMsg homeModel
93-
94- {
95- Page = Home newModel
96- User = model.User
97- },
98- cmd
99- | Login loginModel, LoginPageMsg loginMsg ->
100- let user =
101- match loginMsg with
102- | Login.LoggedIn user -> User user
103- | _ -> model.User
104-
105- let newModel , cmd = Login.update guestApi loginMsg loginModel
106- { Page = Login newModel; User = user }, cmd |> Cmd.map LoginPageMsg
107- | Wishlist wishlistModel, WishlistMsg wishlistMsg ->
108- let token =
109- match model.User with
110- | User data -> data.Token
111- | Guest -> " "
112-
113- let newModel , cmd = WishList.update ( wishListApi token) wishlistMsg wishlistModel
114-
115- {
116- Page = Wishlist newModel
117- User = model.User
118- },
119- cmd |> Cmd.map WishlistMsg
120- | NotFound, _ -> { Page = NotFound; User = model.User }, Cmd.none
121- | _, UrlChanged url -> initFromUrl model url
122- | _, Logout ->
64+ match msg with
65+ | UrlChanged url -> initFromUrl model url
66+ | Logout ->
12367 Session.deleteUser ()
12468 { model with User = Guest }, Cmd.navigate " "
125- | _, OnSessionChange ->
69+ | OnSessionChange ->
12670 let session = Session.loadUser ()
12771 let user = session |> Option.map User |> Option.defaultValue Guest
12872
@@ -132,7 +76,6 @@ let update msg model =
13276 |> Option.defaultValue ( Cmd.navigate " login" )
13377
13478 { model with User = user }, cmd
135- | _, _ -> model, Cmd.none
13679
13780open Feliz
13881
@@ -177,9 +120,9 @@ let view model dispatch =
177120 prop.className " overflow-y-auto"
178121 prop.children [
179122 match model.Page with
180- | Home homeModel -> Home.view homeModel ( HomePageMsg >> dispatch )
181- | Login loginModel -> Login.view loginModel ( LoginPageMsg >> dispatch )
182- | Wishlist wishlistModel -> WishList.view wishlistModel ( WishlistMsg >> dispatch )
123+ | Home -> Home.View guestApi
124+ | Login -> Login.View guestApi
125+ | Wishlist user -> WishList.View user
183126 | NotFound -> Html.div [ prop.text " Not Found" ]
184127 ]
185128 ]
0 commit comments