datatables.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. ajax: {
  26. url: '/api/report-data/' + dataTableName, // Dynamically construct the URL with the datatable name
  27. type: 'GET', // HTTP method
  28. },
  29. columns: dataTableColumnsConfig,
  30. dom: 'lBfrtip', // DataTables layout controls
  31. buttons: [
  32. { extend: 'copyHtml5', className: 'dt-button' },
  33. { extend: 'csvHtml5', className: 'dt-button' },
  34. { extend: 'excelHtml5', className: 'dt-button' },
  35. { extend: 'pdfHtml5', className: 'dt-button' },
  36. { extend: 'print', className: 'dt-button' },
  37. ],
  38. layout: {
  39. topStart: 'buttons' // Buttons positioned at the top-left
  40. },
  41. columnDefs: [
  42. { responsivePriority: 1, targets: 0 }, // Prioritize visibility of employee name
  43. { responsivePriority: 2, targets: -1 } // Secondary priority for office location
  44. ]
  45. });
  46. });
  47. document.addEventListener('DOMContentLoaded', () => {
  48. console.log("datatables.js is working!");
  49. });