All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.karasiq.bootstrap4.table.UniversalPagedTables.scala Maven / Gradle / Ivy

package com.karasiq.bootstrap4.table

import rx.{Rx, Var}

import com.karasiq.bootstrap.components.BootstrapComponents
import com.karasiq.bootstrap.context.RenderingContext
import com.karasiq.bootstrap4.pagination.PageSelectors
import com.karasiq.bootstrap4.utils.Utils

trait UniversalPagedTables extends PagedTables { self: RenderingContext with BootstrapComponents with PageSelectors with Tables with Utils ⇒
  import scalaTags.all._

  type PagedTable = UniversalPagedTable
  object PagedTable extends PagedTableFactory {
    def apply(heading: Rx[Seq[Modifier]], content: Rx[Seq[TableRow]], perPage: Int = 20): PagedTable = {
      new UniversalStaticPagedTableImpl(heading, content, perPage)
    }
  }

  trait UniversalPagedTable extends AbstractPagedTable with BootstrapHtmlComponent {
    override def renderTag(md: ModifierT*): TagT = {
      div(div(pageSelector), table.renderTag(md:_*))
    }
  }

  protected final class UniversalStaticPagedTableImpl(val heading: Rx[Seq[Modifier]],
                                                      val allContent: Rx[Seq[TableRow]],
                                                      val rowsPerPage: Int)
    extends UniversalPagedTable with AbstractStaticPagedTable {

    val currentPage = Var(1)

    val table: Table = Table(heading, PagedTable.pagedDataRx(allContent, currentPage, rowsPerPage))
    val pageSelector: PageSelector = PageSelector(PagedTable.pagesRx(allContent, rowsPerPage), currentPage)

    pageSelector.pages.triggerLater {
      if (currentPage.now > pageSelector.pages.now) currentPage.update(pageSelector.pages.now)
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy