You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

141 lines
3.4 KiB

3 years ago
  1. package outwatchapp.components
  2. import scala.annotation.unused
  3. import scala.scalajs.js.annotation.JSExportAll
  4. import scala.scalajs.js.annotation.JSImport
  5. import colibri.ext.monix._
  6. import monix.bio.Task
  7. import monix.eval.Coeval
  8. import monix.execution.Cancelable
  9. import org.scalajs.dom.raw.HTMLElement
  10. import outwatch.ManagedSubscriptions.managedElement
  11. import typings.datatablesNet.DataTables.ColumnSettings
  12. import typings.datatablesNet.DataTables.FunctionColumnRender
  13. import typings.datatablesNet.DataTables.Settings
  14. import typings.datatablesNet.datatablesNetRequire
  15. import typings.jquery.JQuery_
  16. import typings.jquery.{mod => $}
  17. import scalajs.js
  18. @js.native
  19. @JSImport(
  20. "datatables.net-bs4/css/dataTables.bootstrap4.min.css",
  21. JSImport.Namespace
  22. )
  23. object DataTablesBs4Css extends js.Object
  24. @js.native
  25. @JSImport(
  26. "datatables.net-bs4/js/dataTables.bootstrap4.min.js",
  27. JSImport.Namespace
  28. )
  29. object DataTablesBs4Js extends js.Object
  30. object DatatablesDemo {
  31. implicit def isJQueryDT[T](x: JQuery_[T]): typings.datatablesNet.JQuery =
  32. x.asInstanceOf[typings.datatablesNet.JQuery]
  33. datatablesNetRequire
  34. DataTablesBs4Css
  35. DataTablesBs4Js
  36. @unused
  37. private def _test(tableElement: HTMLElement) = $(tableElement)
  38. .DataTable(
  39. Settings().setColumnsVarargs(
  40. ColumnSettings().setData("name").setRender(nameRenderFn)
  41. )
  42. )
  43. .destroy()
  44. val nameRenderFn: FunctionColumnRender = (_data, tpe, row, d) => {
  45. if (tpe.toString == "display") println("Matched")
  46. else println("Did not match")
  47. // this can be done with scalatags instead
  48. s"""
  49. <div>${_data.toString.toUpperCase}</div>
  50. """
  51. // with scalatags
  52. // import scalatags.Text.all._
  53. // div(_data.toString.toUpperCase).render
  54. }
  55. @JSExportAll
  56. case class TestData(
  57. name: String,
  58. position: String,
  59. location: String,
  60. id: String,
  61. date: String,
  62. salary: String
  63. )
  64. val dataset = js
  65. .Array(
  66. TestData(
  67. "Tiger Nixon",
  68. "System Architect",
  69. "Edinburgh",
  70. "5421",
  71. "2011/04/25",
  72. "$320,800"
  73. ),
  74. TestData(
  75. "Garrett Winters",
  76. "Accountant",
  77. "Tokyo",
  78. "8422",
  79. "2011/07/25",
  80. "$170,750"
  81. ),
  82. TestData(
  83. "Ashton Cox",
  84. "Junior Technical Author",
  85. "San Francisco",
  86. "1562",
  87. "2009/01/12",
  88. "$86,000"
  89. ),
  90. TestData(
  91. "Cedric Kelly",
  92. "Senior Javascript Developer",
  93. "Edinburgh",
  94. "6224",
  95. "2012/03/29",
  96. "$433,060"
  97. )
  98. )
  99. // $(document).ready(_ => $(tableElement).DataTable())
  100. def apply() = {
  101. import outwatch.dsl._
  102. Coeval(
  103. div(
  104. table(idAttr := "myTable")(managedElement { el =>
  105. val dt = $(el).DataTable(
  106. Settings()
  107. .setColumnsVarargs(
  108. ColumnSettings()
  109. .setTitle("Name")
  110. .setData("name")
  111. .setRender(nameRenderFn),
  112. ColumnSettings().setData("position"),
  113. ColumnSettings().setData("location"),
  114. ColumnSettings().setData("id"),
  115. ColumnSettings().setData("date"),
  116. ColumnSettings().setData("salary")
  117. )
  118. .setDom("Blfrtip")
  119. .setData(dataset)
  120. )
  121. Cancelable { () =>
  122. println("Destroying")
  123. dt.destroy()
  124. }
  125. })
  126. )
  127. ).to[Task]
  128. }
  129. }