aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHayleigh Thompson <me@hayleigh.dev>2023-09-09 18:45:01 +0100
committerHayleigh Thompson <me@hayleigh.dev>2023-09-09 18:45:01 +0100
commitf3785a6ee2206decc3785fd8d519d2056cf13f4c (patch)
treef66f5096bbfa890626db158ace764d9c87b787da
parentf6a88070b5e793a2af460090a30f0012ef2af502 (diff)
downloadlustre-f3785a6ee2206decc3785fd8d519d2056cf13f4c.tar.gz
lustre-f3785a6ee2206decc3785fd8d519d2056cf13f4c.zip
:recycle: Error handlers now return a result instead of an option for easier usage.
-rw-r--r--lib/src/lustre/event.gleam60
1 files changed, 28 insertions, 32 deletions
diff --git a/lib/src/lustre/event.gleam b/lib/src/lustre/event.gleam
index 8ee2f4f..f56e5f8 100644
--- a/lib/src/lustre/event.gleam
+++ b/lib/src/lustre/event.gleam
@@ -3,7 +3,6 @@
// IMPORTS ---------------------------------------------------------------------
import gleam/dynamic.{DecodeError, Dynamic}
-import gleam/option.{None, Option, Some}
import gleam/result
import lustre/attribute.{Attribute}
import lustre/effect.{Effect}
@@ -21,7 +20,10 @@ pub fn emit(event: String, data: any) -> Effect(msg)
// CUSTOM EVENTS ---------------------------------------------------------------
-pub fn on(name: String, handler: fn(Dynamic) -> Option(msg)) -> Attribute(msg) {
+pub fn on(
+ name: String,
+ handler: fn(Dynamic) -> Result(msg, error),
+) -> Attribute(msg) {
attribute.on(name, handler)
}
@@ -30,43 +32,43 @@ pub fn on(name: String, handler: fn(Dynamic) -> Option(msg)) -> Attribute(msg) {
///
pub fn on_click(msg: msg) -> Attribute(msg) {
use _ <- on("click")
- Some(msg)
+ Ok(msg)
}
///
pub fn on_mouse_down(msg: msg) -> Attribute(msg) {
use _ <- on("mousedown")
- Some(msg)
+ Ok(msg)
}
///
pub fn on_mouse_up(msg: msg) -> Attribute(msg) {
use _ <- on("mouseup")
- Some(msg)
+ Ok(msg)
}
///
pub fn on_mouse_enter(msg: msg) -> Attribute(msg) {
use _ <- on("mouseenter")
- Some(msg)
+ Ok(msg)
}
///
pub fn on_mouse_leave(msg: msg) -> Attribute(msg) {
use _ <- on("mouseleave")
- Some(msg)
+ Ok(msg)
}
///
pub fn on_mouse_over(msg: msg) -> Attribute(msg) {
use _ <- on("mouseover")
- Some(msg)
+ Ok(msg)
}
///
pub fn on_mouse_out(msg: msg) -> Attribute(msg) {
use _ <- on("mouseout")
- Some(msg)
+ Ok(msg)
}
// KEYBOARD EVENTS -------------------------------------------------------------
@@ -77,10 +79,9 @@ pub fn on_mouse_out(msg: msg) -> Attribute(msg) {
pub fn on_keypress(msg: fn(String) -> msg) -> Attribute(msg) {
use event <- on("keypress")
- case dynamic.field("key", dynamic.string)(event) {
- Ok(key) -> Some(msg(key))
- Error(_) -> None
- }
+ event
+ |> dynamic.field("key", dynamic.string)
+ |> result.map(msg)
}
/// Listens for key dow events on an element, and dispatches a message with the
@@ -89,10 +90,9 @@ pub fn on_keypress(msg: fn(String) -> msg) -> Attribute(msg) {
pub fn on_keydown(msg: fn(String) -> msg) -> Attribute(msg) {
use event <- on("keydown")
- case dynamic.field("key", dynamic.string)(event) {
- Ok(key) -> Some(msg(key))
- Error(_) -> None
- }
+ event
+ |> dynamic.field("key", dynamic.string)
+ |> result.map(msg)
}
/// Listens for key up events on an element, and dispatches a message with the
@@ -101,10 +101,9 @@ pub fn on_keydown(msg: fn(String) -> msg) -> Attribute(msg) {
pub fn on_keyup(msg: fn(String) -> msg) -> Attribute(msg) {
use event <- on("keyup")
- case dynamic.field("key", dynamic.string)(event) {
- Ok(key) -> Some(msg(key))
- Error(_) -> None
- }
+ event
+ |> dynamic.field("key", dynamic.string)
+ |> result.map(msg)
}
// FORM EVENTS -----------------------------------------------------------------
@@ -113,36 +112,33 @@ pub fn on_keyup(msg: fn(String) -> msg) -> Attribute(msg) {
pub fn on_input(msg: fn(String) -> msg) -> Attribute(msg) {
use event <- on("input")
- case value(event) {
- Ok(val) -> Some(msg(val))
- Error(_) -> None
- }
+ event
+ |> dynamic.field("key", dynamic.string)
+ |> result.map(msg)
}
pub fn on_check(msg: fn(Bool) -> msg) -> Attribute(msg) {
use event <- on("change")
- case checked(event) {
- Ok(val) -> Some(msg(val))
- Error(_) -> None
- }
+ checked(event)
+ |> result.map(msg)
}
pub fn on_submit(msg: msg) -> Attribute(msg) {
use _ <- on("submit")
- Some(msg)
+ Ok(msg)
}
// FOCUS EVENTS ----------------------------------------------------------------
pub fn on_focus(msg: msg) -> Attribute(msg) {
use _ <- on("focus")
- Some(msg)
+ Ok(msg)
}
pub fn on_blur(msg: msg) -> Attribute(msg) {
use _ <- on("blur")
- Some(msg)
+ Ok(msg)
}
// DECODERS --------------------------------------------------------------------