···
71
71
let session = init_session(route, is_protected)
72
72
73
73
let router_effect =
74
74
-
fn(uri) { UserNavigatedTo(route.parse(uri)) }
75
75
-
|> modem.init
74
74
+
modem.init(fn(uri) { route.parse(uri) |> UserNavigatedTo })
76
75
77
76
let session_effect =
78
77
UserRestoredSession
···
119
118
120
119
model, ServerRemovedToken(Ok(_)) -> {
121
120
let session = session.None
122
122
-
let model = Model(..model, session:)
123
121
let redirect_to = route.to_path(route.Landing)
124
122
125
125
-
#(model, modem.push(redirect_to, option.None, option.None))
123
123
+
let new = Model(..model, session:)
124
124
+
let effect = modem.push(redirect_to, option.None, option.None)
125
125
+
126
126
+
#(new, effect)
126
127
}
127
128
128
129
// UI ----------------------------------------------------------------------
···
179
180
180
181
// FALLBACK ----------------------------------------------------------------
181
182
//
182
182
-
model, _ -> #(model, effect.none())
183
183
+
_, _ -> #(model, effect.none())
183
184
}
184
185
}
185
186
···
239
240
let route = case model.session, route {
240
241
session.None, _ | session.Pending(_, _), _ if is_protected -> route.Login
241
242
session.Authenticated(_), route.Login -> route.Home
242
242
-
_, route -> route
243
243
+
244
244
+
_, _ -> route
243
245
}
244
246
245
245
-
let model = Model(..model, route:, page: page.init(route))
246
246
-
#(model, effect.none())
247
247
+
let new = Model(..model, route:, page: page.init(route))
248
248
+
#(new, effect.none())
247
249
}
248
250
249
251
/// Default message handling.
···
258
260
) -> #(Model, Effect(Msg)) {
259
261
let #(page_model, effect) = update_fn(page_model, page_msg)
260
262
let page = page_model_fn(page_model)
263
263
+
264
264
+
let new = Model(..model, page:)
261
265
let effect = effect.map(effect, page_msg_map)
262
266
263
263
-
#(Model(..model, page:), effect)
267
267
+
#(new, effect)
264
268
}
265
269
266
270
fn handle_sidebar_msg(model: Model, msg: sidebar.Msg) -> #(Model, Effect(Msg)) {
267
271
case model, msg {
268
268
-
Model(session: session.Authenticated(_), ..), sidebar.UserClickedLogout -> {
269
269
-
let message = ServerRemovedToken
270
270
-
let effect = rsvp.get("/api/logout", rsvp.expect_ok_response(message))
271
271
-
272
272
-
#(model, effect)
273
273
-
}
272
272
+
Model(session: session.Authenticated(_), ..), sidebar.UserClickedLogout -> #(
273
273
+
model,
274
274
+
ServerRemovedToken
275
275
+
|> rsvp.expect_ok_response
276
276
+
|> rsvp.get("/api/logout", _),
277
277
+
)
274
278
275
279
_, _ -> #(model, effect.none())
276
280
}
···
298
302
let message = case reason {
299
303
rsvp.HttpError(resp) -> resp.body
300
304
rsvp.NetworkError -> "Connection unnavailable"
305
305
+
301
306
_ -> ""
302
307
}
303
308
304
304
-
let page =
305
305
-
login.Model(..page_model, loading: False, message:)
306
306
-
|> page.Login
309
309
+
let page_model = login.Model(..page_model, loading: False, message:)
310
310
+
let new = Model(..model, page: page.Login(page_model))
307
311
308
308
-
#(Model(..model, page:), effect.none())
312
312
+
#(new, effect.none())
309
313
}
310
314
}
311
315
}