JSFiddle - React, Tailwind, and code Playground

by 100thGear

HTML

<script src="https://code.jquery.com/jquery-3.4.0.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/tabulator.min.css">
<script src="https://unpkg.com/[email protected]/dist/js/tabulator.min.js"></script>
<!DOCTYPE html>
<html lang="en">

  <body>

    <div id="example-table"></div>
  </body>

</html>

JavaScript

var nestedData = [{
    id: 1,
    make: "Ford",
    model: "focus",
    reg: "P232 NJP",
    color: "white",
    serviceHistory: [{
        date: "01/02/2016",
        engineer: "Steve Boberson",
        actions: "Changed oli filter"
      },
      {
        date: "07/02/2017",
        engineer: "Martin Stevenson",
        actions: "Break light broken"
      },
    ]
  },
  {
    id: 2,
    make: "BMW",
    model: "m3",
    reg: "W342 SEF",
    color: "red",
    serviceHistory: [{
        date: "22/05/2017",
        engineer: "Jimmy Brown",
        actions: "Aligned wheels"
      },
      {
        date: "11/02/2018",
        engineer: "Lotty Ferberson",
        actions: "Changed Oil"
      },
      {
        date: "04/04/2018",
        engineer: "Franco Martinez",
        actions: "Fixed Tracking"
      },
    ]
  },
]

var hideIcon = function(cell, formatterParams, onRendered){ //plain text value
    return "<i class='fa fa-eye-slash'></i>";
};

const table = new Tabulator("#example-table", {
  height: "311px",
  layout: "fitColumns",
  resizableColumns: false,
  data: nestedData,
  selectable: true,
  columns: [{formatter:hideIcon, align:"center", title:"Hide Sub", headerSort:false, cellClick:function(e, row, formatterParams){
     const id = row.getData().id;
    $(".subTable" + id + "").toggle();      
    	}
		},
		{
      title: "Make",
      field: "make"
    },
    {
      title: "Model",
      field: "model"
    },
    {
      title: "Registration",
      field: "reg"
    },
    {
      title: "Color",
      field: "color"
    }
  ],
  rowFormatter: function(row, e) {
    //create and style holder elements
    var holderEl = document.createElement("div");
    var tableEl = document.createElement("div");

    const id = row.getData().id;

    holderEl.style.boxSizing = "border-box";
    holderEl.style.padding = "10px 10px 10px 10px";
    holderEl.style.borderTop = "1px solid #333";
    holderEl.style.borderBotom = "1px solid #333";
   ...