|
|
@@ -14,20 +14,71 @@ import 'datatables.net-responsive-dt';
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
// Ensure jQuery is available globally
|
|
|
window.$ = window.jQuery = $;
|
|
|
window.JSZip = JSZip;
|
|
|
// Initialize DataTable
|
|
|
-let dataTableInstance;
|
|
|
+var dataTableInstance;
|
|
|
var searchTerms ={};
|
|
|
function initializeDataTable() {
|
|
|
var dataTableName = document.getElementById('datatable-config').dataset.datatableName;
|
|
|
var dataTableColumnsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableColumnsConfig);
|
|
|
var dataTableHeadersConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableHeadersConfig);
|
|
|
- if ($.fn.DataTable.isDataTable(`#${dataTableName}-table`)) {
|
|
|
- dataTableInstance.destroy();
|
|
|
- $(`#${dataTableName}-table tbody`).empty(); // Clear rows to prevent residue
|
|
|
+ var dataTablesButtonsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableButtonsConfig);
|
|
|
+ var dataTablesColumnDefsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableColumnDefsConfig);
|
|
|
+
|
|
|
+
|
|
|
+ //Set up any action columns
|
|
|
+ function doActionButton(url, id)
|
|
|
+ {
|
|
|
+ window.open(url, "_blank");
|
|
|
}
|
|
|
+ window.doActionButton=doActionButton;
|
|
|
+
|
|
|
+ var renderFunctions = [];
|
|
|
+ dataTableHeadersConfig.forEach(function (headerColumn, columnIndex){
|
|
|
+ if(headerColumn.type === "action")
|
|
|
+ {
|
|
|
+ let buttonUrl = dataTableColumnsConfig[columnIndex].buttonUrl;
|
|
|
+ let parameters = dataTableColumnsConfig[columnIndex].querystring_parameters;
|
|
|
+ console.log(parameters);
|
|
|
+ let renderBody = `if (type === "display") {console.log(row);`;
|
|
|
+ renderBody += `return '<button class="action-button" onclick="doActionButton(`;
|
|
|
+ renderBody += `\\'`+buttonUrl;
|
|
|
+ parameters.forEach(function (parameter, index){
|
|
|
+ if(index === 0)
|
|
|
+ {
|
|
|
+ renderBody += '?';
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ renderBody += '&';
|
|
|
+ }
|
|
|
+ for(let key in parameter)
|
|
|
+ {
|
|
|
+ renderBody += key+'=';
|
|
|
+ if(parameter[key] === 'row.id')
|
|
|
+ {
|
|
|
+ renderBody += '\'+'+encodeURIComponent(parameter[key])+'+\'';
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ renderBody += encodeURIComponent(parameter[key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ renderBody += `\\'`;
|
|
|
+ renderBody += ")\">"+dataTableColumnsConfig[columnIndex].buttonText+"</button>'}return data;";
|
|
|
+ renderFunctions[columnIndex] = new Function('data', 'type', 'row', 'meta', renderBody);
|
|
|
+ console.log(renderFunctions[columnIndex]);
|
|
|
+ dataTableColumnsConfig[columnIndex].searchable = false;
|
|
|
+ dataTableColumnsConfig[columnIndex].orderable = false;
|
|
|
+ dataTableColumnsConfig[columnIndex].render = renderFunctions[columnIndex];
|
|
|
+
|
|
|
+ }
|
|
|
+ })
|
|
|
|
|
|
dataTableInstance = $(`#${dataTableName}-table`).DataTable({
|
|
|
responsive: true,
|
|
|
@@ -81,20 +132,11 @@ function initializeDataTable() {
|
|
|
},
|
|
|
columns: dataTableColumnsConfig,
|
|
|
dom: 'lBfrtip',
|
|
|
- buttons: [
|
|
|
- { extend: 'copyHtml5', className: 'dt-button' },
|
|
|
- { extend: 'csvHtml5', className: 'dt-button' },
|
|
|
- { extend: 'excelHtml5', className: 'dt-button' },
|
|
|
- { extend: 'pdfHtml5', className: 'dt-button' },
|
|
|
- { extend: 'print', className: 'dt-button' },
|
|
|
- ],
|
|
|
+ buttons: dataTablesButtonsConfig,
|
|
|
layout: {
|
|
|
topStart: 'buttons'
|
|
|
},
|
|
|
- columnDefs: [
|
|
|
- { responsivePriority: 1, targets: 0 },
|
|
|
- { responsivePriority: 2, targets: -1 }
|
|
|
- ]
|
|
|
+ columnDefs: dataTablesColumnDefsConfig
|
|
|
});
|
|
|
}
|
|
|
document.addEventListener('livewire:init', function () {
|