this repo has no description
lustre frontent oat-ui gleam
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

:bulb: add doc comments

+34 -12
+11 -8
client/src/client.gleam
··· 25 25 /// Current Page model 26 26 page: page.Page, 27 27 /// Server uri used for HTTP requests 28 + /// 29 + /// ┌──client──┐ ┌─────────server──────────┐ 30 + /// │  │─→│ https://localhost:8080/ │ 31 + /// └──────────┘ └─────────────────────────┘ 28 32 api: uri.Uri, 29 33 ) 30 34 } ··· 34 38 } 35 39 36 40 pub fn main() -> Nil { 37 - // ┌──client──┐ ┌─────────server──────────┐ 38 - // │  │─→│ https://localhost:8080/ │ 39 - // └──────────┘ └─────────────────────────┘ 40 41 let assert Ok(api) = { 41 42 use value <- result.try(envoy.get("API_URL")) 42 43 uri.parse(value) ··· 149 150 modem.push(route.to_path(on_error), option.None, option.None), 150 151 ) 151 152 152 - // Ended Session 153 - // 153 + // User ended Session. 154 154 // Redirect user to the Home page 155 155 model, ServerRemovedToken(Ok(_)) -> { 156 156 let session = session.None ··· 175 175 } 176 176 } 177 177 178 - fn handle_navigation(model: Model, route: route.Route) -> #(Model, Effect(Msg)) { 178 + fn handle_navigation( 179 + model: Model, 180 + route: route.Route, 181 + ) -> #(Model, Effect(Msg)) { 179 182 use <- bool.guard(model.route == route, #(model, effect.none())) 180 - let is_protected = route.is_protected(route) 183 + let protected = route.is_protected(route) 181 184 182 185 let route = case model.session, route { 183 - session.None, _ | session.Pending(_, _), _ if is_protected -> route.Login 186 + session.None, _ | session.Pending(_, _), _ if protected -> route.Login 184 187 session.Authenticated(_), route.Login -> route.Home 185 188 186 189 _, _ -> route
+23 -4
client/src/client/page/login.gleam
··· 6 6 import shared/session 7 7 8 8 pub type Model { 9 - Model(email: String, password: String, loading: Bool, message: String) 9 + Model( 10 + /// Email field 11 + email: String, 12 + /// Password field 13 + password: String, 14 + /// Waiting for Server's response 15 + loading: Bool, 16 + /// Error message 17 + message: String, 18 + ) 10 19 } 11 20 12 21 pub const empty = Model(email: "", password: "", loading: False, message: "") ··· 25 34 } 26 35 27 36 pub type LoginStep { 37 + /// Continue execution 28 38 Continue(model: Model, effect: effect.Effect(Msg)) 39 + /// Server sucessfully authenticated User session 29 40 ServerAuthenticatedUser(session: session.Session) 41 + /// Server failed to authenticate User session 30 42 ServerFailedToAuthenticate(reason: rsvp.Error) 31 43 } 32 44 33 45 pub fn update(model: Model, msg: Msg, api: uri.Uri) -> LoginStep { 34 46 case msg { 47 + // FIELDS ------------------------------------------------------------------ 35 48 UserTypedEmail(email:) -> { 36 49 let model = Model(..model, email:) 37 50 Continue(model, effect.none()) ··· 49 62 #("password", json.string(model.password)), 50 63 ]) 51 64 52 - let path = uri.Uri(..api, path: "/login") |> uri.to_string 53 - let handler = rsvp.expect_json(session.decoder(), ApiReturnedSession) 54 - let effect = rsvp.post(path, body, handler) 65 + let path = 66 + uri.Uri(..api, path: "/login") 67 + |> uri.to_string 68 + 69 + let effect = 70 + ApiReturnedSession 71 + |> rsvp.expect_json(session.decoder(), _) 72 + |> rsvp.post(path, body, _) 55 73 56 74 let model = Model(..model, loading: True) 57 75 Continue(model, effect) 58 76 } 59 77 78 + // SERVER ------------------------------------------------------------------ 60 79 ApiReturnedSession(Ok(session)) -> ServerAuthenticatedUser(session) 61 80 ApiReturnedSession(Error(reason)) -> ServerFailedToAuthenticate(reason) 62 81 }