diff options
author | Joris | 2017-01-16 22:23:38 +0100 |
---|---|---|
committer | Joris | 2017-01-16 22:23:38 +0100 |
commit | 36fc53409c9119ac94788d8296d6b171eb0a6500 (patch) | |
tree | d75a3f3232ed73e2c9859200f5d88995d379dc08 /src/main/scala/reading/component | |
parent | e9e235a10cabc20ceaf110420d4618e83e425631 (diff) | |
download | reading-36fc53409c9119ac94788d8296d6b171eb0a6500.tar.gz reading-36fc53409c9119ac94788d8296d6b171eb0a6500.tar.bz2 reading-36fc53409c9119ac94788d8296d6b171eb0a6500.zip |
Add navigation history with urls
Diffstat (limited to 'src/main/scala/reading/component')
5 files changed, 20 insertions, 10 deletions
diff --git a/src/main/scala/reading/component/Index.scala b/src/main/scala/reading/component/Index.scala index ef8ae51..41139cc 100644 --- a/src/main/scala/reading/component/Index.scala +++ b/src/main/scala/reading/component/Index.scala @@ -14,8 +14,8 @@ import reading.models.{Book, Filter} import reading.utils.RxAttr object Index { - def apply(): Frag = { - val filters: Var[Seq[Filter]] = Var(Nil) + def apply(initialFilters: Seq[Filter]): HtmlTag = { + val filters: Var[Seq[Filter]] = Var(initialFilters) val books: Rx[Seq[Book]] = Rx { if(filters().isEmpty) Books() else Book.filter(Books(), filters()) } diff --git a/src/main/scala/reading/component/index/Books.scala b/src/main/scala/reading/component/index/Books.scala index 435bf50..3faa130 100644 --- a/src/main/scala/reading/component/index/Books.scala +++ b/src/main/scala/reading/component/index/Books.scala @@ -32,10 +32,12 @@ object Books { ), div( div(BooksStyle.item, s"classe : ${book.programs.map(Program.grade).distinct.sorted.mkString(", ")}"), - div(BooksStyle.item, s"programme : ${book.programs.sorted.mkString(", ")}"), + div(BooksStyle.item, s"programme : ${book.programs.map(p => "« " ++ p.toString ++ " »").sorted.mkString(", ")}"), div(BooksStyle.item, s"thème : ${book.themes.sorted.mkString(", ")}"), div(BooksStyle.item, s"genre : ${book.genres.sorted.mkString(", ")}"), - div(BooksStyle.item, s"période : ${book.period}") + book.period.map { period => + div(BooksStyle.item, s"période : $period") + } ) ) ) diff --git a/src/main/scala/reading/component/index/Filters.scala b/src/main/scala/reading/component/index/Filters.scala index a53e46d..a5ea3f6 100644 --- a/src/main/scala/reading/component/index/Filters.scala +++ b/src/main/scala/reading/component/index/Filters.scala @@ -11,6 +11,7 @@ import reading.component.index.style.{Filters => FiltersStyle} import reading.component.widget.Cross import reading.component.style.Col import reading.models.Filter +import reading.Route import reading.utils.{RxTag, RxAttr} object Filters { @@ -26,7 +27,11 @@ object Filters { filters().sortBy(_.name).map { filter => div( FiltersStyle.filter, - RxAttr(onclick, Rx(() => filters() = Filter.remove(filters(), filter))), + RxAttr(onclick, Rx(() => { + val newFilters = Filter.remove(filters(), filter) + filters() = newFilters + Route.push(Route.Books(newFilters)) + })), span(FiltersStyle.name, filter.name), Cross(15.px, Col.white) ) diff --git a/src/main/scala/reading/component/index/FiltersMenu.scala b/src/main/scala/reading/component/index/FiltersMenu.scala index febc52c..1015df1 100644 --- a/src/main/scala/reading/component/index/FiltersMenu.scala +++ b/src/main/scala/reading/component/index/FiltersMenu.scala @@ -10,6 +10,7 @@ import scalacss.ScalatagsCss._ import reading.component.index.style.{FiltersMenu => FiltersMenuStyle} import reading.models._ import reading.utils.{RxTag, RxAttr} +import reading.Route object FiltersMenu { def apply(books: Rx[Seq[Book]], filters: Var[Seq[Filter]]): Frag = @@ -17,7 +18,7 @@ object FiltersMenu { div( FiltersMenuStyle.render, FiltersMenuStyle.groups, - filters().find(_.kind == GradeKind) match { + filters().find(_.kind == FilterKind.Grade) match { case None => group(books, filters, "Classe", Grade.values.map(Filter.apply(_))) case Some(grade) => @@ -41,7 +42,7 @@ object FiltersMenu { val filtersWithCount = Rx { groupFilters .filter(filter => !Filter.contains(filters(), filter)) - .map(filter => (filter, Book.filter(books(), filter +: filters()).length)) + .map(filter => (filter, Book.filter(books(), Seq(filter)).length)) .filter(_._2 > 0) } @@ -55,7 +56,11 @@ object FiltersMenu { filtersWithCount().map { case (filter, count) => button( FiltersMenuStyle.filter, - RxAttr(onclick, Rx(() => filters() = filter +: filters())), + RxAttr(onclick, Rx(() => { + val newFilters = filter +: filters() + filters() = newFilters + Route.push(Route.Books(newFilters)) + })), span(s"${filter.name.capitalize} ($count)") ) } diff --git a/src/main/scala/reading/component/index/style/Books.scala b/src/main/scala/reading/component/index/style/Books.scala index fc3a18f..ad7375d 100644 --- a/src/main/scala/reading/component/index/style/Books.scala +++ b/src/main/scala/reading/component/index/style/Books.scala @@ -8,8 +8,6 @@ object Books extends StyleSheet.Inline { import dsl._ val books = style( - display.flex, - flexWrap.wrap ) val book = style( |