diff options
Diffstat (limited to 'src/main/scala/reading/component/index/Filters.scala')
-rw-r--r-- | src/main/scala/reading/component/index/Filters.scala | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/main/scala/reading/component/index/Filters.scala b/src/main/scala/reading/component/index/Filters.scala new file mode 100644 index 0000000..3aa26e8 --- /dev/null +++ b/src/main/scala/reading/component/index/Filters.scala @@ -0,0 +1,65 @@ +package reading.component.index + +import rx._ + +import scalatags.JsDom.all._ +import scalacss.Defaults._ +import scalacss.ScalatagsCss._ + +import reading.component.index.style.{ Filters => FiltersStyle } +import reading.component.widget.Cross +import reading.component.style.{ Color => C } +import reading.models.{ Filter, Book } +import reading.utils.RxUtils._ + +object Filters { + def apply( + filters: Var[Seq[Filter]], + detail: Var[Option[Book]], + search: Var[String], + showFiltersMenu: Var[Boolean] + )( + implicit + ctx: Ctx.Owner + ): Frag = { + val filtersCount: Rx[Int] = Rx(filters().length) + + div( + FiltersStyle.render, + FiltersStyle.filters, + + Rx { + div( + div( + FiltersStyle.showFiltersMenu, + onclick := (() => showFiltersMenu() = true), + "Filtrer", + if (filtersCount() > 0) span(FiltersStyle.filtersCount, filtersCount()) else span("") + ), + + if (filters().isEmpty) + span("") + else + div( + FiltersStyle.values, + + div( + FiltersStyle.clear, + onclick := (() => FilterUtils.removeAll(filters, detail, search)), + "Effacer les filtres" + ), + + filters().sortBy(_.name).map { filter => + div( + FiltersStyle.filter, + onclick := (() => FilterUtils.remove(filters, detail, search, filter)), + span(FiltersStyle.name, filter.name.capitalize), + Cross(15.px, C.gray.value) + ) + } + ) + ) + } + ) + } +} |