diff options
Diffstat (limited to 'src/main/scala/reading/component/index/Header.scala')
-rw-r--r-- | src/main/scala/reading/component/index/Header.scala | 48 |
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)) - } } |