1
0

3 Коммитууд 49e03102d7 ... d8f5514306

Эзэн SHA1 Мессеж Огноо
  ttreasure d8f5514306 Added ability to change the report title. Have not connected the title to thw database yet. Also changed routing to test livewire component as full page. 4 сар өмнө
  ttreasure c1c7e8f21d Removed console.log references 4 сар өмнө
  ttreasure 3abc602e48 Strip unnecessary column header data on export 4 сар өмнө

+ 2 - 1
app/Livewire/ShowReports.php

@@ -14,6 +14,7 @@ class ShowReports extends Component
     public $datatableHeadersConfig;
     public $datatableHeadersConfig;
     public $datatableButtonsConfig;
     public $datatableButtonsConfig;
     public $datatableColumnDefsConfig;
     public $datatableColumnDefsConfig;
+    public $title = "Test Report";
 
 
 
 
     public function mount($reportName)
     public function mount($reportName)
@@ -38,7 +39,7 @@ class ShowReports extends Component
     public function render()
     public function render()
     {
     {
 
 
-        return view('livewire.show-reports')->layout('components.layouts.reports');
+        return view('livewire.show-reports')->title($this->title)->layout('components.layouts.reports');
     }
     }
 
 
 
 

+ 26 - 12
resources/js/reports.js

@@ -28,6 +28,30 @@ function initializeDataTable() {
     var dataTablesButtonsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableButtonsConfig);
     var dataTablesButtonsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableButtonsConfig);
     var dataTablesColumnDefsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableColumnDefsConfig);
     var dataTablesColumnDefsConfig = JSON.parse(document.getElementById('datatable-config').dataset.datatableColumnDefsConfig);
 
 
+    //Strip out HTML from headers when exporting
+    dataTablesButtonsConfig.forEach(function(buttonConfig){
+        buttonConfig.exportOptions = buttonConfig.exportOptions || {};
+        for(let key in buttonConfig)
+        {
+            if(key === "exportOptions")
+            {
+
+                buttonConfig.exportOptions.format = {
+                    header: function (data){
+                        const tempDiv = document.createElement('div');
+                        tempDiv.innerHTML = data;
+
+                        // Remove all <select> elements
+                        tempDiv.querySelectorAll('select').forEach(el => el.remove());
+
+                        return tempDiv.textContent.trim().replace(/\s+/g, ' ');
+
+                    }
+                }
+            }
+        }
+    })
+
 
 
     //Set up any action columns
     //Set up any action columns
     function doActionButton(url, id)
     function doActionButton(url, id)
@@ -40,15 +64,13 @@ function initializeDataTable() {
     dataTableHeadersConfig.forEach(function (headerColumn, columnIndex){
     dataTableHeadersConfig.forEach(function (headerColumn, columnIndex){
         if(headerColumn.type === "action")
         if(headerColumn.type === "action")
         {
         {
-            console.log("tyson"+columnIndex);
             let actionButtons = dataTableColumnsConfig[columnIndex].actionButtons;
             let actionButtons = dataTableColumnsConfig[columnIndex].actionButtons;
             let renderBody = '';
             let renderBody = '';
-            renderBody = `if (type === "display") {console.log(row);`;
+            renderBody = `if (type === "display"){`;
             renderBody += `return '`;
             renderBody += `return '`;
             actionButtons.forEach(function (actionButton){
             actionButtons.forEach(function (actionButton){
             let buttonUrl = actionButton.buttonUrl;
             let buttonUrl = actionButton.buttonUrl;
             let parameters = actionButton.querystring_parameters;
             let parameters = actionButton.querystring_parameters;
-            console.log(parameters);
 
 
             renderBody +=  `<button class="action-button" onclick="doActionButton(`;
             renderBody +=  `<button class="action-button" onclick="doActionButton(`;
             renderBody += `\\'`+buttonUrl;
             renderBody += `\\'`+buttonUrl;
@@ -80,7 +102,6 @@ function initializeDataTable() {
             });
             });
             renderBody += "'}return data;";
             renderBody += "'}return data;";
             renderFunctions[columnIndex] = new Function('data', 'type', 'row', 'meta', renderBody);
             renderFunctions[columnIndex] = new Function('data', 'type', 'row', 'meta', renderBody);
-            console.log(renderFunctions[columnIndex]);
             dataTableColumnsConfig[columnIndex].searchable = false;
             dataTableColumnsConfig[columnIndex].searchable = false;
             dataTableColumnsConfig[columnIndex].orderable = false;
             dataTableColumnsConfig[columnIndex].orderable = false;
             dataTableColumnsConfig[columnIndex].render = renderFunctions[columnIndex];
             dataTableColumnsConfig[columnIndex].render = renderFunctions[columnIndex];
@@ -100,16 +121,12 @@ function initializeDataTable() {
             url: '/api/report-data/' + dataTableName,
             url: '/api/report-data/' + dataTableName,
             type: 'POST',
             type: 'POST',
             dataSrc: function (json) {
             dataSrc: function (json) {
-                //console.log('Returned data:', json);
                 //populate any dropdown headers
                 //populate any dropdown headers
-                //console.log(dataTableHeadersConfig);
                 dataTableHeadersConfig.forEach(function(headerConfig, index){
                 dataTableHeadersConfig.forEach(function(headerConfig, index){
 
 
                     if(headerConfig.searchtype == "dropdown")
                     if(headerConfig.searchtype == "dropdown")
                     {
                     {
-                        //console.log('Tyson here');
                         var dropdown = $('#'+headerConfig.header.replace(' ', '-')+'FilterDropdown');
                         var dropdown = $('#'+headerConfig.header.replace(' ', '-')+'FilterDropdown');
-                        //console.log(dropdown);
                         dropdown.empty().append($('<option>',{
                         dropdown.empty().append($('<option>',{
                             value: '',
                             value: '',
                             text: '-- Not  Filtered  --'
                             text: '-- Not  Filtered  --'
@@ -119,7 +136,6 @@ function initializeDataTable() {
                             if(json.searchterms && json.searchterms[index]){
                             if(json.searchterms && json.searchterms[index]){
                                     Object.keys(searchTerms[index]).forEach(function (key){
                                     Object.keys(searchTerms[index]).forEach(function (key){
                                         var searchValue = searchTerms[index][key]
                                         var searchValue = searchTerms[index][key]
-                                        console.log('value: '+searchValue)
                                         if(option === searchValue)
                                         if(option === searchValue)
                                         {
                                         {
                                             selected = true;
                                             selected = true;
@@ -149,7 +165,6 @@ function initializeDataTable() {
 }
 }
 document.addEventListener('livewire:init', function () {
 document.addEventListener('livewire:init', function () {
 
 
-    console.log('Initializing DataTable');
 
 
 
 
 
 
@@ -182,7 +197,6 @@ function getFilterInput(searchTerm, index, searchType, extra){
             break;
             break;
     }
     }
     searchTerms[index] =  inner;
     searchTerms[index] =  inner;
-    console.log(searchTerms[index]);
     dataTableInstance.ajax.reload();
     dataTableInstance.ajax.reload();
 
 
 
 
@@ -198,7 +212,7 @@ window.getFilterInput = getFilterInput;
 
 
 
 
 document.addEventListener('DOMContentLoaded', () => {
 document.addEventListener('DOMContentLoaded', () => {
-    console.log("reports.js is working!");
+
 });
 });
 
 
 
 

+ 2 - 2
resources/views/MainView.blade.php

@@ -1,3 +1,3 @@
-<x-layouts.reports>
-    <livewire:show-reports :reportName="$reportName" />
+ <x-layouts.reports :title="$title">
+    <livewire:show-reports :reportName="$reportName" :title="$title"/>
 </x-layouts.reports>
 </x-layouts.reports>

+ 1 - 1
resources/views/components/layouts/reports.blade.php

@@ -5,7 +5,7 @@
         <meta charset="utf-8">
         <meta charset="utf-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
 
-        <title>{{ $title ?? 'Page Title' }}</title>
+        <title>{{ $title }}</title>
 
 
 
 
 
 

+ 1 - 6
routes/web.php

@@ -2,12 +2,7 @@
 
 
 use Illuminate\Support\Facades\Route;
 use Illuminate\Support\Facades\Route;
 
 
-Route::get('/reports/{report}', function ($report){
-        // Fetch the datatable name dynamically from the database (replace with your logic)
-        $reportName = DB::table('reports')->where('name', '=', $report)->value('name');
-        // Pass it to the view
-        return view('MainView', compact('reportName'));
 
 
-});
 Route::get('/login', \App\Livewire\Login::class);
 Route::get('/login', \App\Livewire\Login::class);
 Route::view('/test-datatables', 'components.layouts/datatables');
 Route::view('/test-datatables', 'components.layouts/datatables');
+Route::get('/reports/{reportName}', App\Livewire\ShowReports::class);