aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/reading/component/index/Filters.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/reading/component/index/Filters.scala')
-rw-r--r--src/main/scala/reading/component/index/Filters.scala65
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)
+ )
+ }
+ )
+ )
+ }
+ )
+ }
+}