#Callbacks: --

Selectable cols table example

Source

import com.fastscala.templates.bootstrap5.helpers.BSHelpers.*

lazy val mainTable = new Table5Base
  with Table5BaseBootrapSupport
  with Table5Paginated
  with Table5SeqSortableDataSource
  with Table5StandardColumns
  with Table5Sortable
  with Table5SelectableCols {
  override type R = Country

  override def defaultPageSize: Int = 10

  override def aroundClasses()(implicit fsc: FSContext): String = super.aroundClasses() + " mb-5"

  override def tableHeadStyle: Option[Table5BootrapStyles.Value] = Some(Table5BootrapStyles.Primary)

  override def tableResponsive: Option[Table5BootrapResponsiveSizes.Value] = Some(Table5BootrapResponsiveSizes.ALL)

  val ColActions = ColNs("Actions", implicit fsc => row => BSBtn().BtnPrimary.sm.lbl("Time?").ajax(implicit fsc => {
    JS.alert(s"Time on server is: ${new Date().toGMTString}")
  }).btn)
  val ColName = ColStr("Name", _.name.common)
  val ColCCA2 = ColStr("CCA2", _.cca2)
  val ColCCN3 = ColStr("CCN3", _.ccn3)
  val ColCCA3 = ColStr("CCA3", _.cca3)
  val ColCIOC = ColStr("CIOC", _.cioc)
  val ColStatus = ColStr("Status", _.status)
  val ColUNMember = ColStr("UN Member", _.unMember.map(_.toString).getOrElse("--"))
  val ColCapital = ColStr("Capital", _.capital.mkString(", "))
  val ColAltSpellings = ColStr("Alt Spellings", _.altSpellings.mkString(", "))
  val ColRegion = ColStr("Region", _.region)
  val ColSubregion = ColStr("Subregion", _.subregion)
  val ColLatLng = ColStr("LatLng", _.latlng.map(_.mkString(";")).getOrElse("--"))
  val ColLandlocked = ColStr("Landlocked", _.landlocked.map(_.toString).getOrElse("--"))
  val ColBorders = ColStr("Borders", _.borders.mkString(", "))
  val ColArea = ColStr("Area", _.area.toString)
  val ColCallingCodes = ColStr("Calling Codes", _.callingCodes.mkString(", "))
  val ColFlag = ColStr("Flag", _.flag)


  override def rowsSorter: PartialFunction[Table5StandardColumn[Country], Seq[Country] => Seq[Country]] = {
    case ColName => _.sortBy(_.name.common)
    case ColCCA2 => _.sortBy(_.cca2)
    case ColCCN3 => _.sortBy(_.ccn3)
    case ColCCA3 => _.sortBy(_.cca3)
    case ColCIOC => _.sortBy(_.cioc)
    case ColStatus => _.sortBy(_.status)
    case ColUNMember => _.sortBy(_.unMember.map(_.toString).getOrElse("--"))
    case ColCapital => _.sortBy(_.capital.mkString(", "))
    case ColAltSpellings => _.sortBy(_.altSpellings.mkString(", "))
    case ColRegion => _.sortBy(_.region)
    case ColSubregion => _.sortBy(_.subregion)
    case ColLatLng => _.sortBy(_.latlng.map(_.mkString(";")).getOrElse("--"))
    case ColLandlocked => _.sortBy(_.landlocked.map(_.toString).getOrElse("--"))
    case ColBorders => _.sortBy(_.borders.mkString(", "))
    case ColArea => _.sortBy(_.area.toString)
    case ColCallingCodes => _.sortBy(_.callingCodes.mkString(", "))
    case ColFlag => _.sortBy(_.flag)
  }

  override def allColumns: List[C] = List(
    ColName
    , ColCCA2
    , ColCCN3
    , ColCCA3
    , ColCIOC
    , ColStatus
    , ColUNMember
    , ColCapital
    , ColAltSpellings
    , ColRegion
    , ColSubregion
    , ColLatLng
    , ColLandlocked
    , ColBorders
    , ColArea
    , ColCallingCodes
    , ColFlag
    , ColActions
  )

  override def columnStartsVisible(c: Table5StandardColumn[Country]): Boolean = Set(
    ColName
    , ColUNMember
    , ColCapital
    , ColArea
    , ColActions
  ).contains(c)

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

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

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

  override def widgetTopRight()(implicit fsc: FSContext): NodeSeq = mainTable.colSelectionDropdownBtn(_.BtnPrimary.lbl("Columns...").sm.dataBsAutoCloseAsOutside)

  override def widgetContents()(implicit fsc: FSContext): NodeSeq = mainTable.render()
}.renderWidget()
NameUN MemberCapitalAreaActions
ArubafalseOranjestad180.0
AfghanistantrueKabul652230.0
AngolatrueLuanda1246700.0
AnguillafalseThe Valley91.0
Åland IslandsfalseMariehamn1580.0
AlbaniatrueTirana28748.0
AndorratrueAndorra la Vella468.0
United Arab EmiratestrueAbu Dhabi83600.0
ArgentinatrueBuenos Aires2780400.0
ArmeniatrueYerevan29743.0