Skip to content

Commit 814f1cd

Browse files
Added scommons-react-redux module
1 parent 7258924 commit 814f1cd

File tree

8 files changed

+97
-0
lines changed

8 files changed

+97
-0
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ language: scala
22
sudo: false
33
jdk:
44
- oraclejdk8
5+
dist: trusty
56
env:
67
global:
78
- TRAVIS_NODE_VERSION="8"

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ val scommonsReactVer = "1.0.0-SNAPSHOT"
1818
libraryDependencies ++= Seq(
1919
"org.scommons.react" %%% "scommons-react-core" % scommonsReactVer,
2020
"org.scommons.react" %%% "scommons-react-dom" % scommonsReactVer,
21+
"org.scommons.react" %%% "scommons-react-redux" % scommonsReactVer,
2122

2223
"org.scommons.react" %%% "scommons-react-test" % scommonsReactVer % "test",
2324
"org.scommons.react" %%% "scommons-react-test-dom" % scommonsReactVer % "test"

build.sbt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ lazy val `scommons-react` = (project in file("."))
1717
.aggregate(
1818
`scommons-react-core`,
1919
`scommons-react-dom`,
20+
`scommons-react-redux`,
2021
`scommons-react-test`,
2122
`scommons-react-test-dom`,
2223
`scommons-react-showcase`
2324
)
2425

2526
lazy val `scommons-react-core` = ReactCore.definition
2627
lazy val `scommons-react-dom` = ReactDom.definition
28+
lazy val `scommons-react-redux` = ReactRedux.definition
2729
lazy val `scommons-react-test` = ReactTest.definition
2830
lazy val `scommons-react-test-dom` = ReactTestDom.definition
2931
lazy val `scommons-react-showcase` = ReactShowcase.definition
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package definitions
2+
3+
import common.{Libs, TestLibs}
4+
import sbt.Keys._
5+
import sbt._
6+
7+
import scalajsbundler.sbtplugin.ScalaJSBundlerPlugin.autoImport._
8+
9+
object ReactRedux extends ScalaJsModule {
10+
11+
override val id: String = "scommons-react-redux"
12+
13+
override val base: File = file("redux")
14+
15+
override def definition: Project = super.definition
16+
.settings(
17+
description := "Scala.js facades for react-redux utilities and components",
18+
19+
requireJsDomEnv in Test := true
20+
)
21+
22+
override val internalDependencies: Seq[ClasspathDep[ProjectReference]] = Seq(
23+
ReactCore.definition
24+
)
25+
26+
override val runtimeDependencies: Def.Initialize[Seq[ModuleID]] = Def.setting(Seq(
27+
Libs.sjsReactJsRedux.value
28+
))
29+
30+
override val testDependencies: Def.Initialize[Seq[ModuleID]] = Def.setting(Seq(
31+
TestLibs.scalaTestJs.value,
32+
TestLibs.scalaMockJs.value
33+
).map(_ % "test"))
34+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package scommons.react.redux
2+
3+
import io.github.shogowada.scalajs.reactjs.React.Props
4+
import io.github.shogowada.scalajs.reactjs.classes.ReactClass
5+
import io.github.shogowada.scalajs.reactjs.redux.ReactRedux
6+
import io.github.shogowada.scalajs.reactjs.redux.Redux.Dispatch
7+
import scommons.react.UiComponent
8+
9+
trait BaseStateController[S, P] {
10+
11+
def apply(): ReactClass = reactClass
12+
13+
private lazy val reactClass = ReactRedux.connectAdvanced { dispatch: Dispatch =>
14+
(state: S, props: Props[Unit]) =>
15+
mapStateToProps(dispatch, state, props)
16+
}(uiComponent.apply())
17+
18+
def uiComponent: UiComponent[P]
19+
20+
def mapStateToProps(dispatch: Dispatch, state: S, props: Props[Unit]): P
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package scommons.react.redux.task
2+
3+
import scala.concurrent.Future
4+
import scala.scalajs.concurrent.JSExecutionContext.Implicits.queue
5+
import scala.util.Try
6+
7+
trait AbstractTask {
8+
9+
val startTime: Long = System.currentTimeMillis()
10+
11+
def message: String
12+
13+
def onComplete(f: Try[_] => Unit): Unit
14+
}
15+
16+
case class FutureTask[T](message: String, future: Future[T]) extends AbstractTask {
17+
18+
def onComplete(f: (Try[_]) => Unit): Unit = future.onComplete(f)
19+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package scommons.react.redux.task
2+
3+
import io.github.shogowada.scalajs.reactjs.redux.Action
4+
5+
trait TaskAction extends Action {
6+
7+
def task: AbstractTask
8+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package scommons.react.redux.task
2+
3+
object TaskReducer {
4+
5+
def apply(state: Option[AbstractTask], action: Any): Option[AbstractTask] = {
6+
action match {
7+
case a: TaskAction => Some(a.task)
8+
case _ => state
9+
}
10+
}
11+
}

0 commit comments

Comments
 (0)