- Notifications
You must be signed in to change notification settings - Fork0
marubinotto/scalafui
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Scalafui is an experimental implementation of the Elm Architecture in Scala.js.
The following code is an example of a minimal application implementation using Scalafui. The framework is a single Scala file (FunctionalUI.scala) that contains the necessary constructs to implement web frontend applications following the Elm Architecture.
...importscalafui.FunctionalUI._objectMain {//// MODEL//caseclassModel(messages:Seq[String]=Seq.empty,input:String="")definit(url:URL): (Model,Seq[Cmd[Msg]])= (Model(),Seq.empty)//// UPDATE//sealedtraitMsgcaseclassInput(input:String)extendsMsgcaseobjectSendextendsMsgdefupdate(msg:Msg,model:Model): (Model,Seq[Cmd[Msg]])= msgmatch {caseInput(input)=> (model.copy(input= input),Seq.empty)caseSend=> ( model.copy(messages= model.messages:+ model.input, input=""),Seq.empty ) }//// VIEW//defview(model:Model,dispatch:Msg=>Unit):ReactElement= div( h1("Welcome to Functional UI!"), div(className:="message-input")( input( value:= model.input, onInput:= (e=> dispatch(Input(e.target.value))) ), button(onClick:= (e=> dispatch(Send)))("Send") ), div(className:="messages")( model.messages.map(div(className:="message")(_)) ) )defmain(args:Array[String]):Unit= {if (LinkingInfo.developmentMode) { hot.initialize() }Browser.runProgram( dom.document.getElementById("app"),Program(init, view, update) ) }}
In development mode, use two terminals in parallel:
$yarn$yarn run dev
sbt> ~fastLinkJS
- Scalafui's version ofTodoMVC
- examples/todo/src/main/scala/scalafui/todo/Main.scala
$cd examples/todo$yarn$yarn run dev
sbt> ~exampleTodo/fastLinkJS
- Multi-page application withAjax calls
- examples/multipage/src/main/scala/scalafui/multipage/Main.scala
$cd examples/multipage$yarn$yarn run dev
sbt> ~exampleMultipage/fastLinkJS
- An example of subscription which allows us to listen to external events
- examples/stopwatch/src/main/scala/scalafui/stopwatch/Main.scala
$cd examples/stopwatch$yarn$yarn run dev
sbt> ~exampleStopwatch/fastLinkJS