Andrew Wallo 1 year ago
parent
commit
39c4943cf1

+ 69
- 0
app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php View File

@@ -0,0 +1,69 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Concerns;
4
+
5
+use Illuminate\Support\Carbon;
6
+
7
+trait HasDeferredFiltersForm
8
+{
9
+    protected function queryStringHasDeferredFiltersForm(): array
10
+    {
11
+        // Get the filter keys dynamically from the filters form
12
+        $filterKeys = collect($this->getFiltersForm()->getFlatFields())->keys()->toArray();
13
+
14
+        return array_merge(
15
+            $this->generateQueryStrings($filterKeys),
16
+            $this->generateExcludedQueryStrings(),
17
+        );
18
+    }
19
+
20
+    protected function generateQueryStrings(array $filterKeys): array
21
+    {
22
+        $generatedQueryStrings = [];
23
+
24
+        $excludedKeys = $this->excludeQueryStrings();
25
+
26
+        foreach ($filterKeys as $key) {
27
+            if (! in_array($key, $excludedKeys)) {
28
+                $generatedQueryStrings["filters.{$key}"] = [
29
+                    'as' => $key,
30
+                    'keep' => true,
31
+                ];
32
+            }
33
+        }
34
+
35
+        return $generatedQueryStrings;
36
+    }
37
+
38
+    protected function generateExcludedQueryStrings(): array
39
+    {
40
+        $excludedQueryStrings = [];
41
+
42
+        foreach ($this->excludeQueryStrings() as $key) {
43
+            $excludedQueryStrings["filters.{$key}.value"] = null;
44
+        }
45
+
46
+        return $excludedQueryStrings;
47
+    }
48
+
49
+    protected function excludeQueryStrings(): array
50
+    {
51
+        return [
52
+            'dateRange', // Example: dateRange should not have 'as' and 'keep'
53
+        ];
54
+    }
55
+
56
+    public function dehydrateHasDeferredFiltersForm(): void
57
+    {
58
+        foreach ($this->filters as $key => $value) {
59
+            if ($this->isDateFilter($value)) {
60
+                $this->filters[$key] = Carbon::parse($value)->toDateString();
61
+            }
62
+        }
63
+    }
64
+
65
+    protected function isDateFilter($value): bool
66
+    {
67
+        return $value instanceof Carbon || strtotime($value) !== false;
68
+    }
69
+}

+ 5
- 0
app/Filament/Company/Pages/Reports/AccountTransactions.php View File

@@ -45,6 +45,11 @@ class AccountTransactions extends BaseReportPage
45 45
         }
46 46
     }
47 47
 
48
+    protected function extraQueryStrings(): array
49
+    {
50
+        return ['selectedAccount'];
51
+    }
52
+
48 53
     /**
49 54
      * @return array<Column>
50 55
      */

+ 5
- 27
app/Filament/Company/Pages/Reports/BaseReportPage.php View File

@@ -4,6 +4,7 @@ namespace App\Filament\Company\Pages\Reports;
4 4
 
5 5
 use App\Contracts\ExportableReport;
6 6
 use App\DTO\ReportDTO;
7
+use App\Filament\Company\Pages\Concerns\HasDeferredFiltersForm;
7 8
 use App\Filament\Forms\Components\DateRangeSelect;
8 9
 use App\Models\Company;
9 10
 use App\Services\DateRangeService;
@@ -24,15 +25,15 @@ use Illuminate\Support\Arr;
24 25
 use Illuminate\Support\Carbon;
25 26
 use Livewire\Attributes\Computed;
26 27
 use Livewire\Attributes\Session;
27
-use Livewire\Attributes\Url;
28 28
 use Symfony\Component\HttpFoundation\StreamedResponse;
29 29
 
30 30
 abstract class BaseReportPage extends Page
31 31
 {
32
+    use HasDeferredFiltersForm;
33
+
32 34
     /**
33 35
      * @var array<string, mixed> | null
34 36
      */
35
-    #[Url]
36 37
     public ?array $filters = null;
37 38
 
38 39
     /**
@@ -88,17 +89,7 @@ abstract class BaseReportPage extends Page
88 89
             $this->filters = null;
89 90
         }
90 91
 
91
-        $filtersForForm = $this->filters !== null
92
-            ? $this->convertDatesToDateTimeString($this->filters)
93
-            : [];
94
-
95
-        $this->getFiltersForm()->fill($filtersForForm);
96
-
97
-        if ($this->filters !== null) {
98
-            $this->filters = $this->normalizeFilters($this->filters);
99
-        }
100
-
101
-        ray($this->filters);
92
+        $this->getFiltersForm()->fill($this->filters);
102 93
     }
103 94
 
104 95
     protected function convertDatesToDateTimeString(array $filters): array
@@ -152,26 +143,13 @@ abstract class BaseReportPage extends Page
152 143
 
153 144
     public function applyFilters(): void
154 145
     {
155
-        $this->filters = $this->normalizeFilters($this->deferredFilters);
146
+        $this->filters = $this->deferredFilters;
156 147
 
157 148
         $this->handleFilterUpdates();
158 149
 
159 150
         $this->loadReportData();
160 151
     }
161 152
 
162
-    protected function normalizeFilters(array $filters): array
163
-    {
164
-        foreach ($filters as $name => &$value) {
165
-            if ($name === 'dateRange') {
166
-                unset($filters[$name]);
167
-            } elseif ($this->isValidDate($value)) {
168
-                $value = Carbon::parse($value)->toDateString();
169
-            }
170
-        }
171
-
172
-        return $filters;
173
-    }
174
-
175 153
     public function getFiltersApplyAction(): Action
176 154
     {
177 155
         return Action::make('applyFilters')

+ 1
- 1
app/Filament/Forms/Components/DateRangeSelect.php View File

@@ -116,7 +116,7 @@ class DateRangeSelect extends Select
116 116
 
117 117
     public function setDateRange(Carbon $start, Carbon $end, Set $set): void
118 118
     {
119
-        $set($this->startDateField, $start->startOfDay()->toDateString());
119
+        $set($this->startDateField, $start->startOfDay()->toDateTimeString());
120 120
         $set($this->endDateField, $end->isFuture() ? now()->endOfDay()->toDateTimeString() : $end->endOfDay()->toDateTimeString());
121 121
     }
122 122
 }

+ 22
- 22
composer.lock View File

@@ -497,16 +497,16 @@
497 497
         },
498 498
         {
499 499
             "name": "aws/aws-sdk-php",
500
-            "version": "3.321.4",
500
+            "version": "3.321.6",
501 501
             "source": {
502 502
                 "type": "git",
503 503
                 "url": "https://github.com/aws/aws-sdk-php.git",
504
-                "reference": "986326efde1d0598ec9fc1b185716550be8ef522"
504
+                "reference": "3dc53a79677dd1f0e682dfc05f9815901ec7bf58"
505 505
             },
506 506
             "dist": {
507 507
                 "type": "zip",
508
-                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/986326efde1d0598ec9fc1b185716550be8ef522",
509
-                "reference": "986326efde1d0598ec9fc1b185716550be8ef522",
508
+                "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/3dc53a79677dd1f0e682dfc05f9815901ec7bf58",
509
+                "reference": "3dc53a79677dd1f0e682dfc05f9815901ec7bf58",
510 510
                 "shasum": ""
511 511
             },
512 512
             "require": {
@@ -589,9 +589,9 @@
589 589
             "support": {
590 590
                 "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
591 591
                 "issues": "https://github.com/aws/aws-sdk-php/issues",
592
-                "source": "https://github.com/aws/aws-sdk-php/tree/3.321.4"
592
+                "source": "https://github.com/aws/aws-sdk-php/tree/3.321.6"
593 593
             },
594
-            "time": "2024-09-04T18:09:31+00:00"
594
+            "time": "2024-09-06T18:06:38+00:00"
595 595
         },
596 596
         {
597 597
             "name": "aws/aws-sdk-php-laravel",
@@ -4967,16 +4967,16 @@
4967 4967
         },
4968 4968
         {
4969 4969
             "name": "nunomaduro/termwind",
4970
-            "version": "v2.0.1",
4970
+            "version": "v2.1.0",
4971 4971
             "source": {
4972 4972
                 "type": "git",
4973 4973
                 "url": "https://github.com/nunomaduro/termwind.git",
4974
-                "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a"
4974
+                "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a"
4975 4975
             },
4976 4976
             "dist": {
4977 4977
                 "type": "zip",
4978
-                "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a",
4979
-                "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a",
4978
+                "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a",
4979
+                "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a",
4980 4980
                 "shasum": ""
4981 4981
             },
4982 4982
             "require": {
@@ -4986,11 +4986,11 @@
4986 4986
             },
4987 4987
             "require-dev": {
4988 4988
                 "ergebnis/phpstan-rules": "^2.2.0",
4989
-                "illuminate/console": "^11.0.0",
4990
-                "laravel/pint": "^1.14.0",
4991
-                "mockery/mockery": "^1.6.7",
4992
-                "pestphp/pest": "^2.34.1",
4993
-                "phpstan/phpstan": "^1.10.59",
4989
+                "illuminate/console": "^11.1.1",
4990
+                "laravel/pint": "^1.15.0",
4991
+                "mockery/mockery": "^1.6.11",
4992
+                "pestphp/pest": "^2.34.6",
4993
+                "phpstan/phpstan": "^1.10.66",
4994 4994
                 "phpstan/phpstan-strict-rules": "^1.5.2",
4995 4995
                 "symfony/var-dumper": "^7.0.4",
4996 4996
                 "thecodingmachine/phpstan-strict-rules": "^1.0.0"
@@ -5035,7 +5035,7 @@
5035 5035
             ],
5036 5036
             "support": {
5037 5037
                 "issues": "https://github.com/nunomaduro/termwind/issues",
5038
-                "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1"
5038
+                "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0"
5039 5039
             },
5040 5040
             "funding": [
5041 5041
                 {
@@ -5051,7 +5051,7 @@
5051 5051
                     "type": "github"
5052 5052
                 }
5053 5053
             ],
5054
-            "time": "2024-03-06T16:17:14+00:00"
5054
+            "time": "2024-09-05T15:25:50+00:00"
5055 5055
         },
5056 5056
         {
5057 5057
             "name": "openspout/openspout",
@@ -10103,16 +10103,16 @@
10103 10103
         },
10104 10104
         {
10105 10105
             "name": "phpstan/phpstan",
10106
-            "version": "1.12.1",
10106
+            "version": "1.12.2",
10107 10107
             "source": {
10108 10108
                 "type": "git",
10109 10109
                 "url": "https://github.com/phpstan/phpstan.git",
10110
-                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2"
10110
+                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
10111 10111
             },
10112 10112
             "dist": {
10113 10113
                 "type": "zip",
10114
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
10115
-                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
10114
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
10115
+                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
10116 10116
                 "shasum": ""
10117 10117
             },
10118 10118
             "require": {
@@ -10157,7 +10157,7 @@
10157 10157
                     "type": "github"
10158 10158
                 }
10159 10159
             ],
10160
-            "time": "2024-09-03T19:55:22+00:00"
10160
+            "time": "2024-09-05T16:09:28+00:00"
10161 10161
         },
10162 10162
         {
10163 10163
             "name": "phpunit/php-code-coverage",

+ 12
- 12
package-lock.json View File

@@ -765,9 +765,9 @@
765 765
             ]
766 766
         },
767 767
         "node_modules/@tailwindcss/forms": {
768
-            "version": "0.5.8",
769
-            "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.8.tgz",
770
-            "integrity": "sha512-DJs7B7NPD0JH7BVvdHWNviWmunlFhuEkz7FyFxE4japOWYMLl9b1D6+Z9mivJJPWr6AEbmlPqgiFRyLwFB1SgQ==",
768
+            "version": "0.5.9",
769
+            "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.9.tgz",
770
+            "integrity": "sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==",
771 771
             "dev": true,
772 772
             "license": "MIT",
773 773
             "dependencies": {
@@ -998,9 +998,9 @@
998 998
             }
999 999
         },
1000 1000
         "node_modules/caniuse-lite": {
1001
-            "version": "1.0.30001655",
1002
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
1003
-            "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
1001
+            "version": "1.0.30001658",
1002
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001658.tgz",
1003
+            "integrity": "sha512-N2YVqWbJELVdrnsW5p+apoQyYt51aBMSsBZki1XZEfeBCexcM/sf4xiAHcXQBkuOwJBXtWF7aW1sYX6tKebPHw==",
1004 1004
             "dev": true,
1005 1005
             "funding": [
1006 1006
                 {
@@ -1159,9 +1159,9 @@
1159 1159
             "license": "MIT"
1160 1160
         },
1161 1161
         "node_modules/electron-to-chromium": {
1162
-            "version": "1.5.13",
1163
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
1164
-            "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
1162
+            "version": "1.5.18",
1163
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
1164
+            "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
1165 1165
             "dev": true,
1166 1166
             "license": "ISC"
1167 1167
         },
@@ -1275,9 +1275,9 @@
1275 1275
             }
1276 1276
         },
1277 1277
         "node_modules/follow-redirects": {
1278
-            "version": "1.15.8",
1279
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
1280
-            "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
1278
+            "version": "1.15.9",
1279
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
1280
+            "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
1281 1281
             "dev": true,
1282 1282
             "funding": [
1283 1283
                 {

+ 3
- 3
resources/views/components/company/tables/reports/detailed-report.blade.php View File

@@ -35,9 +35,9 @@
35 35
                                         :icon-position="\Filament\Support\Enums\IconPosition::After"
36 36
                                         :icon-size="\Filament\Support\Enums\IconSize::Small"
37 37
                                         href="{{ \App\Filament\Company\Pages\Reports\AccountTransactions::getUrl([
38
-                                            'filters[startDate]' => $cell['start_date'],
39
-                                            'filters[endDate]' => $cell['end_date'],
40
-                                            'filters[selectedAccount]' => $cell['id']
38
+                                            'startDate' => $cell['start_date'],
39
+                                            'endDate' => $cell['end_date'],
40
+                                            'selectedAccount' => $cell['id']
41 41
                                         ]) }}"
42 42
                                     >
43 43
                                         {{ $cell['name'] }}

Loading…
Cancel
Save