From 98ce79520d69fe66c85fb17cee9c38aa80625471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= <clement.pit-claudel@epfl.ch> Date: Sun, 22 Dec 2024 01:46:31 +0100 Subject: [PATCH] client: Simplify implementation of home page --- .../scala/cs214/webapp/client/Pages.scala | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/js/src/main/scala/cs214/webapp/client/Pages.scala b/js/src/main/scala/cs214/webapp/client/Pages.scala index 0b54847..d70fb37 100644 --- a/js/src/main/scala/cs214/webapp/client/Pages.scala +++ b/js/src/main/scala/cs214/webapp/client/Pages.scala @@ -29,7 +29,7 @@ abstract class Page: List("app", appId) case UIPage(appId, instanceId) => List("app", appId, instanceId) - case JoinPageLoader(appId, instanceId, uiId) => + case JoinPage(appId, instanceId, uiId) => List("app", appId, instanceId, uiId) case AppPage(appId, instanceId, uiId, userId) => List("app", appId, instanceId, uiId, userId) @@ -55,7 +55,7 @@ object Page: case List("app", appId, instanceId) => UIPage(appId, instanceId) case List("app", appId, instanceId, uiId) => - JoinPageLoader(appId, instanceId, uiId) + JoinPage(appId, instanceId, uiId) case List("app", appId, instanceId, uiId, userId) => AppPage(appId, instanceId, uiId, userId) case _ => @@ -65,18 +65,14 @@ object Page: object HomePage extends Page: val classList = "HomePage" - def renderInto(target: Element) = - Requests.listApps.map: response => - AppSelectionPage(response.apps).renderInto(target) - -/** The app selection menu, where the user can create a new app. */ -case class AppSelectionPage(apps: Seq[AppInfo]) extends Page: - val classList = "AppSelectionPage" - def selectApp(appId: AppId): Unit = WebClient.navigateTo(InstanceCreationPage(appId)) - def renderInto(target: Element) = replaceChildren(target): + def renderInto(target: Element) = + Requests.listApps.map: resp => + doRender(resp.apps)(target) + + private def doRender(apps: Seq[AppInfo])(target: Element) = replaceChildren(target): frag( pageHeader("Select an app"), apps.groupBy(_.year).toList.map: (year, appsOfYear) => @@ -138,25 +134,25 @@ case class UIPage(appId: AppId, instanceId: InstanceId) extends Page: private val handleKeyboardEvent: Function1[dom.KeyboardEvent, Unit] = (e: dom.KeyboardEvent) => if e.keyCode == KeyCode.Enter then e.preventDefault() - joinPageLoader() + joinPage() private def handleFormSubmission(e: dom.Event): Unit = e.preventDefault() - joinPageLoader() + joinPage() private def getSelected = appUIs.zipWithIndex.find { (ui, i) => getElementById[Input](cssId(i)).checked }.map(_._1) - private def joinPageLoader(): Unit = + private def joinPage(): Unit = getSelected.map: ui => - WebClient.navigateTo(JoinPageLoader(appId, instanceId, ui.uiId)) + WebClient.navigateTo(JoinPage(appId, instanceId, ui.uiId)) def renderInto(target: Element) = require(appUIs.nonEmpty, f"No UI found for app with id $appId.") if appUIs.size == 1 then - WebClient.navigateTo(JoinPageLoader(appId, instanceId, appUIs(0).uiId), overwriteHistory = true) + WebClient.navigateTo(JoinPage(appId, instanceId, appUIs(0).uiId), overwriteHistory = true) else replaceChildren(target): dom.window.addEventListener("keydown", handleKeyboardEvent) frag( @@ -183,14 +179,14 @@ case class UIPage(appId: AppId, instanceId: InstanceId) extends Page: ) /** The pre-connection menu, which fetches the user list. */ -case class JoinPageLoader(appId: AppId, instanceId: InstanceId, uiId: UIId) extends Page: +case class JoinPage(appId: AppId, instanceId: InstanceId, uiId: UIId) extends Page: val classList = "JoinPageLoader" def renderInto(target: Element) = Requests.instanceInfo(instanceId).map: resp => - JoinPage(appId, instanceId, uiId, resp.userIds).renderInto(target) + JoinPage_(appId, instanceId, uiId, resp.userIds).renderInto(target) /** The connection menu, where a user joins an existing app. */ -case class JoinPage(appId: AppId, instanceId: InstanceId, uiId: UIId, userIds: Seq[UserId]) +case class JoinPage_(appId: AppId, instanceId: InstanceId, uiId: UIId, userIds: Seq[UserId]) extends Page: require(userIds.size > 0) val classList = "JoinPage" -- GitLab