From 75fc205db10d91a0efb435e0107f0e5e9e91cd63 Mon Sep 17 00:00:00 2001 From: Kacper Korban <kacper.f.korban@gmail.com> Date: Tue, 10 Dec 2024 17:44:09 +0100 Subject: [PATCH] Move PatchableUI to IncrementalUI.scala and change StateMachineClientAppInstance to take non-using parameters first --- .../scala/cs214/webapp/client/StateMachineClientApp.scala | 4 ++-- .../scala/cs214/webapp/client/graphics/IncrementalUI.scala | 6 +++++- .../cs214/webapp/client/graphics/WebClientAppInstance.scala | 3 --- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/js/src/main/scala/cs214/webapp/client/StateMachineClientApp.scala b/js/src/main/scala/cs214/webapp/client/StateMachineClientApp.scala index 0797906..5c59937 100644 --- a/js/src/main/scala/cs214/webapp/client/StateMachineClientApp.scala +++ b/js/src/main/scala/cs214/webapp/client/StateMachineClientApp.scala @@ -36,10 +36,10 @@ abstract class WSClientApp extends ClientApp: * how to send a json message */ abstract class StateMachineClientAppInstance[Event, View]( - using ec: scala.concurrent.ExecutionContext -)( userId: UserId, sendMessage: ujson.Value => Unit, +)( + using scala.concurrent.ExecutionContext ) extends ClientAppInstance, ClientUI[View]: /** Provides serialization methods for events and views */ def wire: AppWire[Event, View] diff --git a/js/src/main/scala/cs214/webapp/client/graphics/IncrementalUI.scala b/js/src/main/scala/cs214/webapp/client/graphics/IncrementalUI.scala index a892d23..09dc4c6 100644 --- a/js/src/main/scala/cs214/webapp/client/graphics/IncrementalUI.scala +++ b/js/src/main/scala/cs214/webapp/client/graphics/IncrementalUI.scala @@ -11,6 +11,10 @@ import org.scalajs.dom import scalatags.JsDom.Frag +trait PatchableUI: + /** Updates the DOM Element with a new fragment. */ + def patchUI(target: dom.Element, fr: Frag): Unit + /** Updates the DOM using a custom library instead of `replaceChildren`. * * This avoid flickering and losing UI state such as the current text @@ -22,7 +26,7 @@ trait DomPatchingUI extends PatchableUI: protected def importLib(name: String, url: String): Future[js.Dynamic] = js.`import`[js.Dynamic](url).toFuture.recover: exn => - println(f"Exception while load `$name`: ${exn.getMessage()}") + println(f"Exception while loading `$name`: ${exn.getMessage()}") println(f"`$name` library loading failed: falling back to `replaceChildren` permanently") throw exn diff --git a/js/src/main/scala/cs214/webapp/client/graphics/WebClientAppInstance.scala b/js/src/main/scala/cs214/webapp/client/graphics/WebClientAppInstance.scala index 0db946b..48498b8 100644 --- a/js/src/main/scala/cs214/webapp/client/graphics/WebClientAppInstance.scala +++ b/js/src/main/scala/cs214/webapp/client/graphics/WebClientAppInstance.scala @@ -36,6 +36,3 @@ abstract class WebClientAppInstance[Event, View]( override def patchUI(target: dom.Element, fr: Frag): Unit = target.replaceChildren(fr.render) - -trait PatchableUI: - def patchUI(target: dom.Element, fr: Frag): Unit -- GitLab