datatables.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import 'tailwindcss';
  2. import $ from 'jquery';
  3. import 'laravel-datatables-vite';
  4. import JSZip from 'jszip'; // Required for Excel and CSV export
  5. import 'datatables.net';
  6. import 'datatables.net-buttons';
  7. import 'datatables.net-buttons/js/buttons.html5.js'; // For HTML5 export buttons
  8. import 'datatables.net-buttons/js/buttons.print.min.js'; // For the print button
  9. import 'datatables.net-responsive';
  10. import 'pdfmake/build/pdfmake.js'; // Required for PDF export
  11. import 'pdfmake/build/vfs_fonts.js'; // Required for PDF export
  12. import './dataTables.tailwindcss.js';
  13. import 'datatables.net-responsive-dt';
  14. // Ensure jQuery is available globally
  15. window.$ = window.jQuery = $;
  16. window.JSZip = JSZip;
  17. // Initialize DataTable
  18. document.addEventListener('livewire:init', function () {
  19. var dataTableName = document.getElementById('datatable-config').dataset.datatableName;
  20. var dataTableColumnsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableColumnsConfig);
  21. $('#'+dataTableName+'-table').DataTable({
  22. responsive: true,
  23. processing: true,
  24. serverSide: true,
  25. orderCellsTop: true, // Allows inputs in the header
  26. fixedHeader: true, // Optional: keeps header fixed while scrolling
  27. ajax: {
  28. url: '/api/report-data/' + dataTableName, // Dynamically construct the URL with the datatable name
  29. type: 'GET', // HTTP method
  30. },
  31. columns: dataTableColumnsConfig,
  32. dom: 'lBfrtip', // DataTables layout controls
  33. buttons: [
  34. { extend: 'copyHtml5', className: 'dt-button' },
  35. { extend: 'csvHtml5', className: 'dt-button' },
  36. { extend: 'excelHtml5', className: 'dt-button' },
  37. { extend: 'pdfHtml5', className: 'dt-button' },
  38. { extend: 'print', className: 'dt-button' },
  39. ],
  40. layout: {
  41. topStart: 'buttons' // Buttons positioned at the top-left
  42. },
  43. columnDefs: [
  44. { responsivePriority: 1, targets: 0 }, // Prioritize visibility of employee name
  45. { responsivePriority: 2, targets: -1 } // Secondary priority for office location
  46. ]
  47. });
  48. });
  49. document.addEventListener('DOMContentLoaded', () => {
  50. console.log("datatables.js is working!");
  51. });