You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package nova.monadic_sfx.screens import akka.actor.typed._ import io.odin.Logger import monix.eval.Task import nova.monadic_sfx.AppTypes import nova.monadic_sfx.executors.Schedulers import nova.monadic_sfx.http.Requesters import nova.monadic_sfx.http.requests.DummyRequest import nova.monadic_sfx.ui.screens.Screen import nova.monadic_sfx.util.Action import scalafx.Includes._ import scalafx.application.JFXApp.PrimaryStage import scalafx.scene.Parent import scalafx.scene.control.TextField import scalafx.scene.control._ import scalafx.scene.layout.VBox // import io.odin.syntax._
// import _root_.monix.eval.Task
// import io.odin.monix._
// import javafx.beans.property.ObjectProperty
// import javafx.event.{ActionEvent, EventHandler}
class LoginScreen( override protected val appStage: PrimaryStage, logger: Logger[Task], backend: AppTypes.HttpBackend, system: ActorSystem[SpawnProtocol.Command], requesters: Requesters, // dm: DummyRequest,
schedulers: Schedulers ) extends Screen { val dummyRequester: DummyRequest = requesters.dummyRequester //pure function callbacks, but with side effects still
// lazy val hs = {
// import com.softwaremill.macwire._
// lazy val action = () => onLogout(appStage)
// wire[HomeScreen]
// }
private def onLogout(stage: PrimaryStage) = for { _ <- logger.info("Logging out") root <- render _ <- changeRootL(root) } yield ()
private def onLogin(stage: PrimaryStage) = for { _ <- logger.info("Logging in") homeScreen <- HomeScreen( backend, system, () => onLogout(appStage) ) _ <- Task { stage.scene().setRoot(homeScreen) } } yield ()
private lazy val root = Task.deferAction(implicit s => Task { new VBox { children = Seq( new Label { text = "username" }, new TextField(), new Label { text = "password" }, new TextField(), new Button { text = "Login" // onAction.-->
onAction = () => Action.asyncT { Task .parSequence( List( testRequest, // .executeOn(Scheduler.global)
onLogin(appStage) ) ) } } ) } } ) def render: Task[Parent] = root
val testRequest = for { res <- dummyRequester.send _ <- logger.info(res.body.toString()) } yield ()
}
// object LoginScreen {
// def apply(
// appStage: PrimaryStage,
// backend: AppTypes.HttpBackend,
// system: ActorSystem[SpawnProtocol.Command]
// ) = new LoginScreen(appStage, backend, system).render
// }
|