DataTables

DataTables Examples

HTML

<script src="https://akilijs.com/js/libs/akili.min.js"></script>
<script src="https://cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.11/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.1.2/css/buttons.dataTables.min.css">
<script src="https://cdn.datatables.net/buttons/1.1.2/js/dataTables.buttons.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/select/1.1.2/css/select.dataTables.min.css">
<script src="https://cdn.datatables.net/select/1.1.2/js/dataTables.select.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="//cdn.datatables.net/responsive/2.0.2/js/dataTables.responsive.min.js"></script>
<link rel="stylesheet" href="//cdn.datatables.net/responsive/2.0.2/css/responsive.dataTables.min.css">
<script src="http://kingkode.com/datatables.editor.lite/js/altEditor/dataTables.altEditor.free.js"></script>
<app>
  <span>app data length: ${ this.arr.length }</span>
  <button on-click="${ this.arr.shift() }">shift</button>
  <div>
     <data-table 
       data="${ this.arr }" 
       on-data="${ this.arr = event.detail }"
     ></data-table>
  </div> 
</app>

CSS

table.dataTable tbody>tr.selected,
table.dataTable tbody>tr>.selected {
  background-color: #A2D3F6;
}

JavaScript

class App extends Akili.Component {
	static define() {
  	Akili.component('app', this);
  }
  
	created() {
  	this.scope.arr = [];
    
    for(let i = 1; i <= 9; i++) {
    	this.scope.arr.push(['item' + i]);
    } 
  }
}

class DataTable extends Akili.Component { 
	static define() {
  	Akili.component('data-table', this);
  }
  
	static get template() {
  	return `
    	<span>data-table data length: \${ this.data.length}</span>
    	<div class="container">
      	<table class="dataTable table table-striped"></table>
    	</div>
    `
  }
  
  created() {
  	this.scope.data = [];
  	this.dataTable = null;
  	this.options = {
      bPaginate: false,
      bFilter: false,
      bInfo: false,
      ordering: false,
      processing: true,
      columns: [       
        { title: "Name" }        
      ],
      dom: 'Bfrtip',
        select: 'single',
        responsive: true,
        altEditor: true,
        buttons: [{
          text: 'Add',
          name: 'add'
        }]
    };
  }
  
	compiled() {   
  	this.attr('data', 'data');  
    this.attr('data', this.setDataTable);
  }
  
  removed() {
  	this.dataTable && this.dataTable.destroy();
  }
  
  setDataTable() {      
    if(this.dataTable) {
      this.dataTable.clear();
      this.dataTable.rows.add(this.scope.data);
      this.dataTable.draw();
      return;
    }

    let options = Object.assign({data: this.scope.data}, this.options);
    this.dataTable = $('.dataTable').DataTable(options);  

    this.dataTable.on( 'draw', () => {
      let data = this.dataTable.data();
      let clearData = [];

      for(let i = 0, l = data.length; i < l; i++) {
        clearData.push(data[i]);
      }

      this.scope.data = clearData;   
    });
  }
} 
  
App.define();
DataTable.define();
Akili.init();