package reading.component.index import rx._ import scalacss.Defaults._ import scalacss.ScalatagsCss._ import scalatags.JsDom.all._ import reading.component.index.style.{ Filters => FiltersStyle } import reading.component.style.{ Color => C } import reading.component.widget.Cross import reading.models.{ Filter, Book } import reading.Route import reading.utils.RxUtils._ object Filters { def apply( filters: Var[Set[Filter]], detail: Var[Option[Book]], search: Var[String], showFiltersMenu: Var[Boolean] )( implicit ctx: Ctx.Owner ): Frag = { val filtersCount: Rx[Int] = Rx(filters().size) 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, a( FiltersStyle.clear, onclick := (() => FilterUtils.removeAll(filters, detail, search)), href := Route.url(Route.Books()), "Effacer les filtres" ), filters().toSeq.sortBy(_.name).map { filter => a( FiltersStyle.filter, onclick := (() => FilterUtils.remove(filters, detail, search, filter)), href := Rx(Route.url(Route.Books(Filter.remove(filters(), filter)))), span(FiltersStyle.name, filter.name.capitalize), Cross(15.px, C.gray.value) ) } ) ) } ) } }