瀏覽代碼

Merge pull request #59 from andrewdwallo/development-3.x

Defer report initial page load
3.x
Andrew Wallo 1 年之前
父節點
當前提交
2f37d03f9e
沒有連結到貢獻者的電子郵件帳戶。

+ 8
- 3
app/Filament/Company/Pages/Reports/BaseReportPage.php 查看文件

41
 
41
 
42
     public Company $company;
42
     public Company $company;
43
 
43
 
44
+    public bool $reportLoaded = false;
45
+
44
     #[Session]
46
     #[Session]
45
     public array $toggledTableColumns = [];
47
     public array $toggledTableColumns = [];
46
 
48
 
63
 
65
 
64
         $this->loadDefaultDateRange();
66
         $this->loadDefaultDateRange();
65
 
67
 
66
-        $this->loadReportData();
67
-
68
         $this->loadDefaultTableColumnToggleState();
68
         $this->loadDefaultTableColumnToggleState();
69
     }
69
     }
70
 
70
 
94
     public function loadReportData(): void
94
     public function loadReportData(): void
95
     {
95
     {
96
         unset($this->report);
96
         unset($this->report);
97
+        $this->reportLoaded = true;
97
     }
98
     }
98
 
99
 
99
     protected function loadDefaultTableColumnToggleState(): void
100
     protected function loadDefaultTableColumnToggleState(): void
142
     }
143
     }
143
 
144
 
144
     #[Computed(persist: true)]
145
     #[Computed(persist: true)]
145
-    public function report(): ExportableReport
146
+    public function report(): ?ExportableReport
146
     {
147
     {
148
+        if ($this->reportLoaded === false) {
149
+            return null;
150
+        }
151
+
147
         $columns = $this->getToggledColumns();
152
         $columns = $this->getToggledColumns();
148
         $reportDTO = $this->buildReport($columns);
153
         $reportDTO = $this->buildReport($columns);
149
 
154
 

+ 17
- 5
app/Services/ExportService.php 查看文件

12
 {
12
 {
13
     public function exportToCsv(Company $company, ExportableReport $report, string $startDate, string $endDate): StreamedResponse
13
     public function exportToCsv(Company $company, ExportableReport $report, string $startDate, string $endDate): StreamedResponse
14
     {
14
     {
15
-        $filename = $company->name . ' ' . $report->getTitle() . ' ' . $startDate . ' to ' . $endDate . '.csv';
15
+        $formattedStartDate = Carbon::parse($startDate)->format('Y-m-d');
16
+        $formattedEndDate = Carbon::parse($endDate)->format('Y-m-d');
17
+
18
+        $timestamp = Carbon::now()->format('Y-m-d-H_i');
19
+
20
+        $filename = $company->name . ' ' . $report->getTitle() . ' ' . $formattedStartDate . ' to ' . $formattedEndDate . ' ' . $timestamp . '.csv';
16
 
21
 
17
         $headers = [
22
         $headers = [
18
             'Content-Type' => 'text/csv',
23
             'Content-Type' => 'text/csv',
19
             'Content-Disposition' => 'attachment; filename="' . $filename . '"',
24
             'Content-Disposition' => 'attachment; filename="' . $filename . '"',
20
         ];
25
         ];
21
 
26
 
22
-        $callback = function () use ($report, $company, $startDate, $endDate) {
27
+        $callback = function () use ($report, $company, $formattedStartDate, $formattedEndDate) {
23
             $file = fopen('php://output', 'wb');
28
             $file = fopen('php://output', 'wb');
24
 
29
 
25
             fputcsv($file, [$report->getTitle()]);
30
             fputcsv($file, [$report->getTitle()]);
26
             fputcsv($file, [$company->name]);
31
             fputcsv($file, [$company->name]);
27
-            fputcsv($file, ['Date Range: ' . $startDate . ' to ' . $endDate]);
32
+            fputcsv($file, ['Date Range: ' . $formattedStartDate . ' to ' . $formattedEndDate]);
28
             fputcsv($file, []);
33
             fputcsv($file, []);
29
 
34
 
30
             fputcsv($file, $report->getHeaders());
35
             fputcsv($file, $report->getHeaders());
50
 
55
 
51
     public function exportToPdf(Company $company, ExportableReport $report, string $startDate, string $endDate): StreamedResponse
56
     public function exportToPdf(Company $company, ExportableReport $report, string $startDate, string $endDate): StreamedResponse
52
     {
57
     {
58
+        $formattedStartDate = Carbon::parse($startDate)->format('Y-m-d');
59
+        $formattedEndDate = Carbon::parse($endDate)->format('Y-m-d');
60
+
61
+        $timestamp = Carbon::now()->format('Y-m-d-H_i');
62
+
63
+        $filename = $company->name . ' ' . $report->getTitle() . ' ' . $formattedStartDate . ' to ' . $formattedEndDate . ' ' . $timestamp . '.pdf';
64
+
53
         $pdf = Pdf::loadView('components.company.reports.report-pdf', [
65
         $pdf = Pdf::loadView('components.company.reports.report-pdf', [
54
             'company' => $company,
66
             'company' => $company,
55
             'report' => $report,
67
             'report' => $report,
56
             'startDate' => Carbon::parse($startDate)->format('M d, Y'),
68
             'startDate' => Carbon::parse($startDate)->format('M d, Y'),
57
             'endDate' => Carbon::parse($endDate)->format('M d, Y'),
69
             'endDate' => Carbon::parse($endDate)->format('M d, Y'),
58
-        ])->setPaper('a4');
70
+        ])->setPaper('letter');
59
 
71
 
60
         return response()->streamDownload(function () use ($pdf) {
72
         return response()->streamDownload(function () use ($pdf) {
61
             echo $pdf->stream();
73
             echo $pdf->stream();
62
-        }, strtolower(str_replace(' ', '-', $company->name . '-' . $report->getTitle())) . '.pdf');
74
+        }, $filename);
63
     }
75
     }
64
 }
76
 }

+ 6
- 8
resources/views/components/company/reports/report-pdf.blade.php 查看文件

6
     <title>{{ $report->getTitle() }}</title>
6
     <title>{{ $report->getTitle() }}</title>
7
     <style>
7
     <style>
8
         @page {
8
         @page {
9
-            size: A4;
10
-            margin: 8.5mm 8.5mm 30mm 8.5mm;
9
+            size: auto;
10
+            margin: 10mm 7.5mm;
11
         }
11
         }
12
 
12
 
13
         .header {
13
         .header {
15
             margin-bottom: 1rem;
15
             margin-bottom: 1rem;
16
         }
16
         }
17
 
17
 
18
+        .header > * + * {
19
+            margin-top: 0.5rem;
20
+        }
21
+
18
         .table-head {
22
         .table-head {
19
             display: table-row-group;
23
             display: table-row-group;
20
         }
24
         }
36
             color: #374151;
40
             color: #374151;
37
         }
41
         }
38
 
42
 
39
-        .header .title,
40
-        .header .company-name,
41
-        .header .date-range {
42
-            margin-bottom: 0.125rem; /* Uniform space between header elements */
43
-        }
44
-
45
         .title {
43
         .title {
46
             font-size: 1.5rem;
44
             font-size: 1.5rem;
47
         }
45
         }

+ 4
- 2
resources/views/filament/company/pages/reports/detailed-report.blade.php 查看文件

17
                 </form>
17
                 </form>
18
             </div>
18
             </div>
19
             <div class="divide-y divide-gray-200 overflow-x-auto overflow-y-hidden dark:divide-white/10 dark:border-t-white/10">
19
             <div class="divide-y divide-gray-200 overflow-x-auto overflow-y-hidden dark:divide-white/10 dark:border-t-white/10">
20
-                <div class="flex items-center justify-center">
20
+                <div wire:init="loadReportData" class="flex items-center justify-center">
21
                     <div wire:loading.delay wire:target="loadReportData">
21
                     <div wire:loading.delay wire:target="loadReportData">
22
                         <x-filament::loading-indicator class="p-6 text-primary-700 dark:text-primary-300" />
22
                         <x-filament::loading-indicator class="p-6 text-primary-700 dark:text-primary-300" />
23
                     </div>
23
                     </div>
24
                 </div>
24
                 </div>
25
 
25
 
26
                 <div wire:loading.remove wire:target="loadReportData">
26
                 <div wire:loading.remove wire:target="loadReportData">
27
-                    <x-company.tables.reports.detailed-report :report="$this->report" />
27
+                    @if($this->report)
28
+                        <x-company.tables.reports.detailed-report :report="$this->report" />
29
+                    @endif
28
                 </div>
30
                 </div>
29
             </div>
31
             </div>
30
             <div class="es-table__footer-ctn border-t border-gray-200"></div>
32
             <div class="es-table__footer-ctn border-t border-gray-200"></div>

Loading…
取消
儲存