Skip to content

Commit e40320b

Browse files
author
Ryan Miville
committed
remove Noop
1 parent 7d7ec7a commit e40320b

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

src/todomvc.gleam

+23-16
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import gleam/bool
22
import gleam/dict.{type Dict}
3+
import gleam/dynamic
34
import gleam/int
45
import gleam/list
5-
import gleam/option.{Some}
6+
import gleam/option.{type Option, None, Some}
67
import gleam/order
8+
import gleam/result
79
import lustre
810
import lustre/attribute.{type Attribute}
911
import lustre/effect.{type Effect}
@@ -50,7 +52,6 @@ fn init(_) -> #(Model, Effect(msg)) {
5052
// UPDATE ---------------------------------------------------------------------
5153

5254
type Msg {
53-
Noop
5455
UserAddedTodo
5556
UserBlurredExistingTodo(id: Int)
5657
UserClickedClearCompleted
@@ -68,8 +69,6 @@ fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) {
6869
let Model(todos, _, last_id, new_todo_input, existing_todo_input) = model
6970

7071
case msg {
71-
Noop -> #(model, effect.none())
72-
7372
UserAddedTodo -> {
7473
let description = new_todo_input
7574
let last_id = last_id + 1
@@ -211,9 +210,9 @@ fn footer(model: Model) -> Element(Msg) {
211210
fn new_todo(model: Model) -> Element(Msg) {
212211
html.div([attribute.class("view")], [
213212
input(
214-
on_enter: on_enter(UserAddedTodo),
213+
on_enter: UserAddedTodo,
215214
on_input: UserUpdatedNewInput,
216-
on_blur: Noop,
215+
on_blur: None,
217216
placeholder: "What needs to be done?",
218217
autofocus: True,
219218
label: "New Todo Input",
@@ -261,9 +260,9 @@ fn todo_item(item: Todo, model: Model) -> Element(Msg) {
261260
fn todo_item_edit(item: Todo, model: Model) -> Element(Msg) {
262261
html.div([attribute.class("view")], [
263262
input(
264-
on_enter: on_enter(UserEditedTodo(item.id)),
263+
on_enter: UserEditedTodo(item.id),
265264
on_input: UserUpdatedExistingInput,
266-
on_blur: UserBlurredExistingTodo(item.id),
265+
on_blur: Some(UserBlurredExistingTodo(item.id)),
267266
placeholder: "",
268267
autofocus: False,
269268
label: "Edit Todo Input",
@@ -336,14 +335,19 @@ fn clear_completed(model: Model) -> Element(Msg) {
336335
}
337336

338337
fn input(
339-
on_enter on_enter: Attribute(Msg),
338+
on_enter on_enter: Msg,
340339
on_input on_input: fn(String) -> Msg,
341-
on_blur on_blur: Msg,
340+
on_blur on_blur: Option(Msg),
342341
placeholder placeholder: String,
343342
autofocus autofocus: Bool,
344343
label label: String,
345344
value value: String,
346345
) -> Element(Msg) {
346+
let on_blur =
347+
on_blur
348+
|> option.map(event.on_blur)
349+
|> option.unwrap(attribute.none())
350+
347351
html.div([attribute.class("input-container")], [
348352
html.input([
349353
attribute.class("new-todo"),
@@ -352,9 +356,9 @@ fn input(
352356
attribute.autofocus(autofocus),
353357
attribute.placeholder(placeholder),
354358
attribute.value(value),
355-
on_enter,
359+
on_enter_down(on_enter),
356360
event.on_input(on_input),
357-
event.on_blur(on_blur),
361+
on_blur,
358362
]),
359363
html.label(
360364
[attribute.class("visually-hidden"), attribute.for("todo-input")],
@@ -379,11 +383,14 @@ fn on_double_click(msg: Msg) -> Attribute(Msg) {
379383
Ok(msg)
380384
}
381385

382-
fn on_enter(msg: Msg) -> Attribute(Msg) {
383-
event.on_keydown(fn(key) {
386+
fn on_enter_down(msg: Msg) -> Attribute(Msg) {
387+
use event <- event.on("keydown")
388+
event
389+
|> dynamic.field("key", dynamic.string)
390+
|> result.try(fn(key) {
384391
case key {
385-
"Enter" -> msg
386-
_ -> Noop
392+
"Enter" -> Ok(msg)
393+
_ -> Error([])
387394
}
388395
})
389396
}

0 commit comments

Comments
 (0)