diff --git a/client/src/client.gleam b/client/src/client.gleam index 6856ca3..b6731cb 100644 --- a/client/src/client.gleam +++ b/client/src/client.gleam @@ -71,8 +71,7 @@ fn init(_props: Nil) -> #(Model, Effect(Msg)) { let session = init_session(route, is_protected) let router_effect = - fn(uri) { UserNavigatedTo(route.parse(uri)) } - |> modem.init + modem.init(fn(uri) { route.parse(uri) |> UserNavigatedTo }) let session_effect = UserRestoredSession @@ -119,10 +118,12 @@ fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) { model, ServerRemovedToken(Ok(_)) -> { let session = session.None - let model = Model(..model, session:) let redirect_to = route.to_path(route.Landing) - #(model, modem.push(redirect_to, option.None, option.None)) + let new = Model(..model, session:) + let effect = modem.push(redirect_to, option.None, option.None) + + #(new, effect) } // UI ---------------------------------------------------------------------- @@ -179,7 +180,7 @@ fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) { // FALLBACK ---------------------------------------------------------------- // - model, _ -> #(model, effect.none()) + _, _ -> #(model, effect.none()) } } @@ -239,11 +240,12 @@ fn handle_navigation(model: Model, route: route.Route) -> #(Model, Effect(Msg)) let route = case model.session, route { session.None, _ | session.Pending(_, _), _ if is_protected -> route.Login session.Authenticated(_), route.Login -> route.Home - _, route -> route + + _, _ -> route } - let model = Model(..model, route:, page: page.init(route)) - #(model, effect.none()) + let new = Model(..model, route:, page: page.init(route)) + #(new, effect.none()) } /// Default message handling. @@ -258,19 +260,21 @@ fn handle_msg( ) -> #(Model, Effect(Msg)) { let #(page_model, effect) = update_fn(page_model, page_msg) let page = page_model_fn(page_model) + + let new = Model(..model, page:) let effect = effect.map(effect, page_msg_map) - #(Model(..model, page:), effect) + #(new, effect) } fn handle_sidebar_msg(model: Model, msg: sidebar.Msg) -> #(Model, Effect(Msg)) { case model, msg { - Model(session: session.Authenticated(_), ..), sidebar.UserClickedLogout -> { - let message = ServerRemovedToken - let effect = rsvp.get("/api/logout", rsvp.expect_ok_response(message)) - - #(model, effect) - } + Model(session: session.Authenticated(_), ..), sidebar.UserClickedLogout -> #( + model, + ServerRemovedToken + |> rsvp.expect_ok_response + |> rsvp.get("/api/logout", _), + ) _, _ -> #(model, effect.none()) } @@ -298,14 +302,14 @@ fn handle_login_msg( let message = case reason { rsvp.HttpError(resp) -> resp.body rsvp.NetworkError -> "Connection unnavailable" + _ -> "" } - let page = - login.Model(..page_model, loading: False, message:) - |> page.Login + let page_model = login.Model(..page_model, loading: False, message:) + let new = Model(..model, page: page.Login(page_model)) - #(Model(..model, page:), effect.none()) + #(new, effect.none()) } } }