From b9b17e5fc652cb02f8f21e1899b2f19f3510f36c Mon Sep 17 00:00:00 2001 From: Nikita Gazarov Date: Sat, 25 Nov 2023 00:59:36 +0100 Subject: [PATCH] New: `apply` alias for `compose` event processor --- .../com/raquo/laminar/keys/EventProcessor.scala | 14 ++++++++++++++ src/test/scala/com/raquo/laminar/SyntaxSpec.scala | 10 ++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/scala/com/raquo/laminar/keys/EventProcessor.scala b/src/main/scala/com/raquo/laminar/keys/EventProcessor.scala index 68f782de..0218c630 100644 --- a/src/main/scala/com/raquo/laminar/keys/EventProcessor.scala +++ b/src/main/scala/com/raquo/laminar/keys/EventProcessor.scala @@ -221,7 +221,14 @@ class EventProcessor[Ev <: dom.Event, V]( * * a(onClick.preventDefault.compose(_.delay(100)) --> observer) * + * Note: can also use with more compact `apply` alias: + * + * div(onScroll(_.throttle(100)) --> observer) + * + * a(onClick.preventDefault(_.delay(100)) --> observer) + * * Note: This method is not chainable. Put all the operations you need inside the `operator` callback. + * */ def compose[Out]( operator: EventStream[V] => Observable[Out] @@ -229,6 +236,13 @@ class EventProcessor[Ev <: dom.Event, V]( new LockedEventKey(this, operator) } + /** Alias for [[compose]] */ + @inline def apply[Out]( + composer: EventStream[V] => Observable[Out] + ): LockedEventKey[Ev, V, Out] = { + compose(composer) + } + /** Similar to the Airstream `flatMap` operator. * * Use this when you want to create a new stream or signal on every event, e.g.: diff --git a/src/test/scala/com/raquo/laminar/SyntaxSpec.scala b/src/test/scala/com/raquo/laminar/SyntaxSpec.scala index 151b8d06..5ef36093 100644 --- a/src/test/scala/com/raquo/laminar/SyntaxSpec.scala +++ b/src/test/scala/com/raquo/laminar/SyntaxSpec.scala @@ -609,4 +609,14 @@ class SyntaxSpec extends UnitSpec { assert(intVar.now() == 15) } + it("compose syntax") { + val eventObs = Observer.empty[dom.Event] + div( + onClick.compose(_.delay(100)) --> eventObs, + onClick(_.delay(100)) --> eventObs, + // + onClick.preventDefault.compose(_.delay(100)) --> eventObs, + onClick.preventDefault(_.delay(100)) --> eventObs, + ) + } }