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