Skip to main content Skip to docs navigation

FSContext discard

Old FSContext is discarded on rerender, so the number of callbacks doesn't grow indefinitely

Selectable rows

NameCapitalRegionArea
ArubaOranjestadAmericas180.0
AfghanistanKabulAsia652230.0
AngolaLuandaAfrica1246700.0
AnguillaThe ValleyAmericas91.0
Åland IslandsMariehamnEurope1580.0
AlbaniaTiranaEurope28748.0
AndorraAndorra la VellaEurope468.0
United Arab EmiratesAbu DhabiAsia83600.0
ArgentinaBuenos AiresAmericas2780400.0
ArmeniaYerevanAsia29743.0
scala

    // Debug rerenderable:
    val table = new Table5Base
      with Table5BaseBootrapSupport
      with Table5SelectableRows
      with Table5StandardColumns
      with Table5Paginated {
      override type R = Country

      override def defaultPageSize: Int = 10

      val ColName = ColStr("Name", _.name.common)
      val ColCapital = ColStr("Capital", _.capital.mkString(", "))
      val ColRegion = ColStr("Region", _.region)
      val ColArea = ColStr("Area", _.area.toString)

      override def columns(): List[C] = List(
        ColName
        , ColCapital
        , ColRegion
        , ColArea
        , ColSelectRow
      )

      override def seqRowsSource: Seq[Country] = CountriesData.data
    }

    new Widget {
      override def widgetTitle: String = "Selectable rows"

      override def transformWidgetCardBody(elem: Elem): Elem = super.transformWidgetCardBody(elem).p_0

      override def widgetTopRight()(implicit fsc: FSContext): NodeSeq =
        BSBtn().BtnDanger.toggler(
          () => RerendererDebugStatusState() == RerendererDebugStatus.Enabled,
          {
            case true =>
              RerendererDebugStatusState() = RerendererDebugStatus.Enabled
              JS.reload()
            case false =>
              RerendererDebugStatusState() = RerendererDebugStatus.Disabled
              JS.reload()
          },
          "Debug disabled",
          "Debug enabled",
        ) ++
          table.clearRowSelectionBtn.btn.ms_2 ++
          table.selectAllVisibleRowsBtn.btn.ms_2

      override def widgetContents()(implicit fsc: FSContext): NodeSeq = table.render()
    }.renderWidget()