This repository has no description
lustre gleam
0

Configure Feed

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

:recycle: autocomplete leader name instead

author
kacaii.dev
date (Apr 1, 2026, 8:34 PM -0300) commit 7abc9e2c parent 5a11107b change-id rnnsqyql
+24 -25
+23 -24
client/src/client/page/register_crew.gleam
··· 23 23 24 24 pub const empty: Model = Model( 25 25 selected_leader: option.None, 26 - crew_leader_email: "", 26 + crew_leader_name: "", 27 27 crew_name: input.Input( 28 28 hint: "", 29 29 id: "crew-name", ··· 41 41 pub type Model { 42 42 Model( 43 43 crew_name: input.Input, 44 - crew_leader_email: String, 44 + crew_leader_name: String, 45 45 selected_leader: option.Option(User), 46 46 selected_members: List(User), 47 47 suggested_leaders: List(User), ··· 56 56 57 57 // Form 58 58 UserTypedCrewName(value: String) 59 - UserTypedLeaderEmail(value: String) 59 + UserTypedLeaderName(value: String) 60 60 UserClickedSubmit 61 61 UserClickedSearchLeader 62 62 ··· 71 71 Model( 72 72 ..model, 73 73 selected_leader: option.Some(user), 74 - crew_leader_email: user.email, 74 + crew_leader_name: user.full_name, 75 75 suggested_leaders: [], 76 76 ) 77 77 ··· 106 106 #(Model(..model, crew_name:), effect.none()) 107 107 } 108 108 109 - // TODO: 110 - UserClickedSubmit -> #(model, effect.none()) 111 - 112 - UserTypedLeaderEmail(value) -> { 109 + UserTypedLeaderName(value) -> { 113 110 let new = case value { 114 111 "" -> 115 112 Model( 116 113 ..model, 117 - crew_leader_email: value, 114 + crew_leader_name: value, 118 115 selected_leader: option.None, 119 116 suggested_leaders: [], 120 117 ) 121 118 122 - value -> Model(..model, crew_leader_email: value) 119 + value -> Model(..model, crew_leader_name: value) 123 120 } 124 121 125 122 #(new, effect.none()) 126 123 } 127 124 128 125 UserClickedSearchLeader -> { 129 - let value = model.crew_leader_email 130 - 131 126 let query = 132 127 uri.query_to_string([ 133 - #("q", "email"), 134 - #("value", value), 128 + #("q", "name"), 129 + #("value", model.crew_leader_name), 135 130 #("limit", "2"), 136 131 ]) 137 132 138 - let api = contract.email_autocomplete_url <> "?" <> query 133 + let api = contract.autocomplete_url <> "?" <> query 139 134 140 135 let effect = 141 136 decode.list(user.decoder()) ··· 151 146 ) 152 147 153 148 ApiSuggestedLeaders(Error(_)) -> #(model, effect.none()) 149 + 150 + // TODO: 151 + UserClickedSubmit -> #(model, effect.none()) 154 152 } 155 153 } 156 154 ··· 179 177 } 180 178 181 179 fn view_leader_selection(model: Model) -> element.Element(Msg) { 182 - let input_id = "leader-email-input" 180 + let input_id = "leader-name-input" 183 181 184 182 let attributes = [ 185 183 form.field(), 186 184 attr.type_("text"), 187 185 attr.id(input_id), 188 - attr.value(model.crew_leader_email), 189 - attr.placeholder("leader@email.com"), 186 + attr.value(model.crew_leader_name), 187 + attr.placeholder("John Doe"), 190 188 191 - event.on_input(UserTypedLeaderEmail), 189 + event.on_input(UserTypedLeaderName), 192 190 ] 193 191 194 192 let search_button = { 195 193 let on_click = event.on_click(UserClickedSearchLeader) 196 194 197 - let email_is_empty = string.is_empty(model.crew_leader_email) 198 - let email_is_too_short = string.length(model.crew_leader_email) <= 3 195 + let email_is_empty = string.is_empty(model.crew_leader_name) 196 + let email_is_too_short = string.length(model.crew_leader_name) <= 3 199 197 200 198 let attributes = [ 201 199 on_click, ··· 211 209 212 210 let view_leaders = case model.suggested_leaders { 213 211 [] -> element.none() 214 - found -> 215 - [class("grid grid-cols-1 gap-2 @md:grid-cols-2")] 212 + found -> { 213 + [class("grid grid-cols-1 gap-4"), class("@md:grid-cols-2")] 216 214 |> html.div(list.map(found, view_user_to_leader_card(model, _))) 215 + } 217 216 } 218 217 219 218 html.div([class("@container")], [ 220 - html.label([attr.for(input_id), class("py-1")], [html.text("Leader email")]), 219 + html.label([attr.for(input_id), class("py-1")], [html.text("Leader")]), 221 220 form.fieldset([form.group()], [form.input(attributes), search_button]), 222 221 view_leaders, 223 222 ])
+1 -1
shared/src/shared/contract/register_crew.gleam
··· 5 5 6 6 pub const url = "/api/crew" 7 7 8 - pub const email_autocomplete_url = "/api/user/autocomplete" 8 + pub const autocomplete_url = "/api/user/autocomplete" 9 9 10 10 // REQUEST --------------------------------------------------------------------- 11 11