Skip to main content Skip to docs navigation

Table with Column Selection Example

On this page
Stats
#callbacks:

Source

Name UN Member Capital Area
Aruba false Oranjestad 180.0
Afghanistan true Kabul 652230.0
Angola true Luanda 1246700.0
Anguilla false The Valley 91.0
Åland Islands false Mariehamn 1580.0
Albania true Tirana 28748.0
Andorra true Andorra la Vella 468.0
United Arab Emirates true Abu Dhabi 83600.0
Argentina true Buenos Aires 2780400.0
Armenia true Yerevan 29743.0
Showing 10 of 250
scala
import com.fastscala.components.bootstrap5.helpers.BSHelpers.*

lazy val mainTable = new Table6Base
  with Table6BootrapStyling
  with Table6PaginatedWithSeqDataSource
  with Table6SortableWithSeqDataSource
  with Table6StandardColumns
  with Table6Sortable
  with Table6ColumnSelection {
  override type R = Country

  override def defaultPageSize: Int = 10

  onTableWrapper(_.mb_5)

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

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

  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[C, 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
  )

  override lazy val initiallyVisibleColumns: Set[Table6StandardColumn[Country]] = Set(
    ColName
    , ColUNMember
    , ColCapital
    , ColArea
  )

  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.columnSelectionDropdown()

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