aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/reading/component/index/Header.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/reading/component/index/Header.scala')
-rw-r--r--src/main/scala/reading/component/index/Header.scala48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/main/scala/reading/component/index/Header.scala b/src/main/scala/reading/component/index/Header.scala
index cf078ad..50d520e 100644
--- a/src/main/scala/reading/component/index/Header.scala
+++ b/src/main/scala/reading/component/index/Header.scala
@@ -1,32 +1,39 @@
package reading.component.index
import rx._
-import Ctx.Owner.Unsafe._
import scalatags.JsDom.all._
import scalacss.Defaults._
import scalacss.ScalatagsCss._
import reading.component.index.style.{ Header => HeaderStyle }
-import reading.component.widget.Cross
+import reading.component.widget.{ Cross, Input }
import reading.component.style.{ Color => C }
-import reading.models.Filter
-import reading.Route
-import reading.utils.{ RxTag, RxAttr }
+import reading.models.{ Book, Filter }
+import reading.utils.RxUtils._
object Header {
- def apply(filters: Var[Seq[Filter]], showFiltersMenu: Var[Boolean], booksCount: Rx[Int]): Frag = {
+ def apply(
+ books: Rx[Seq[Book]],
+ filters: Var[Seq[Filter]],
+ search: Var[String],
+ showFiltersMenu: Var[Boolean]
+ )(
+ implicit
+ ctx: Ctx.Owner
+ ): Frag = {
val filtersCount: Rx[Int] = Rx(filters().length)
+ val booksCount: Rx[Int] = books.map(_.length)
div(
HeaderStyle.render,
HeaderStyle.header,
- RxTag { implicit context =>
+ Rx {
div(
div(
HeaderStyle.showFiltersMenu,
- RxAttr(onclick, Rx(() => showFiltersMenu() = true)),
+ onclick := (() => showFiltersMenu() = true),
"Filtrer",
if (filtersCount() > 0) span(HeaderStyle.filtersCount, filtersCount()) else span("")
),
@@ -39,14 +46,14 @@ object Header {
div(
HeaderStyle.clear,
- RxAttr(onclick, Rx(() => updateFilters(filters, Nil))),
+ onclick := (() => FilterUtils.removeAll(filters, search)),
"Effacer les filtres"
),
filters().sortBy(_.name).map { filter =>
div(
HeaderStyle.filter,
- RxAttr(onclick, Rx(() => updateFilters(filters, Filter.remove(filters(), filter)))),
+ onclick := (() => FilterUtils.remove(filters, search, filter)),
span(HeaderStyle.name, filter.name.capitalize),
Cross(15.px, C.black.value)
)
@@ -55,17 +62,16 @@ object Header {
)
},
- RxTag { implicit context =>
- div(
- HeaderStyle.booksCount,
- span(s"${booksCount()} livre${if (booksCount() > 1) "s" else ""}")
- )
- }
+ div(
+ HeaderStyle.searchAndCount,
+ Input(HeaderStyle.search, search, "Rechercher"),
+ Rx {
+ div(
+ HeaderStyle.booksCount,
+ span(s"${booksCount()} livre${if (booksCount() > 1) "s" else ""}")
+ )
+ }
+ )
)
}
-
- private def updateFilters(filters: Var[Seq[Filter]], newFilters: Seq[Filter]): Unit = {
- filters() = newFilters
- Route.push(Route.Books(newFilters))
- }
}