package reading.component.index import rx._ import scalatags.JsDom.all._ import scalacss.Defaults._ import scalacss.ScalatagsCss._ import reading.component.index.style.{ Books => BooksStyle } import reading.component.widget.Modal import reading.models.{ Book } import reading.utils.RxUtils._ object Books { def apply(books: Rx[Seq[Book]])(implicit ctx: Ctx.Owner): Frag = { val focus: Var[Option[Book]] = Var(None) div( BooksStyle.render, Rx { div( div( BooksStyle.books, books().sorted.map { book => div( BooksStyle.book, img( BooksStyle.cover, src := s"cover/${book.title}.jpg", alt := s"${book.title}, ${book.author}", onclick := (() => focus() = Some(book)) ) ) } ), Rx { focus() match { case Some(book) => Modal(onClose = focus() = None)(BookDetail(book)) case None => span("") } } ) } ) } }