Andrew Wallo 10 mesi fa
parent
commit
d34069be0a

+ 12
- 0
app/Filament/Company/Clusters/Settings/Pages/Appearance.php Vedi File

@@ -8,6 +8,7 @@ use App\Enums\Setting\RecordsPerPage;
8 8
 use App\Enums\Setting\TableSortDirection;
9 9
 use App\Filament\Company\Clusters\Settings;
10 10
 use App\Models\Setting\Appearance as AppearanceModel;
11
+use App\Services\CompanySettingsService;
11 12
 use Filament\Actions\Action;
12 13
 use Filament\Actions\ActionGroup;
13 14
 use Filament\Forms\Components\Component;
@@ -165,10 +166,21 @@ class Appearance extends Page
165 166
             'font',
166 167
         ];
167 168
 
169
+        $cachedKeysToWatch = [
170
+            'primary_color',
171
+            'font',
172
+            'table_sort_direction',
173
+            'records_per_page',
174
+        ];
175
+
168 176
         if ($record->isDirty($keysToWatch)) {
169 177
             $this->dispatch('appearanceUpdated');
170 178
         }
171 179
 
180
+        if ($record->isDirty($cachedKeysToWatch)) {
181
+            CompanySettingsService::invalidateSettings($record->company_id);
182
+        }
183
+
172 184
         $record->save();
173 185
 
174 186
         return $record;

+ 2
- 0
app/Filament/Company/Clusters/Settings/Pages/Localization.php Vedi File

@@ -9,6 +9,7 @@ use App\Enums\Setting\WeekStart;
9 9
 use App\Filament\Company\Clusters\Settings;
10 10
 use App\Models\Setting\CompanyProfile as CompanyProfileModel;
11 11
 use App\Models\Setting\Localization as LocalizationModel;
12
+use App\Services\CompanySettingsService;
12 13
 use App\Utilities\Localization\Timezone;
13 14
 use Filament\Actions\Action;
14 15
 use Filament\Actions\ActionGroup;
@@ -214,6 +215,7 @@ class Localization extends Page
214 215
         ];
215 216
 
216 217
         if ($record->isDirty($keysToWatch)) {
218
+            CompanySettingsService::invalidateSettings($record->company_id);
217 219
             $this->dispatch('localizationUpdated');
218 220
         }
219 221
 

+ 17
- 27
app/Listeners/ConfigureCompanyDefault.php Vedi File

@@ -2,13 +2,10 @@
2 2
 
3 3
 namespace App\Listeners;
4 4
 
5
-use App\Enums\Setting\DateFormat;
6
-use App\Enums\Setting\Font;
7 5
 use App\Enums\Setting\PrimaryColor;
8 6
 use App\Enums\Setting\RecordsPerPage;
9
-use App\Enums\Setting\TableSortDirection;
10
-use App\Enums\Setting\WeekStart;
11 7
 use App\Events\CompanyConfigured;
8
+use App\Services\CompanySettingsService;
12 9
 use App\Utilities\Currency\ConfigureCurrencies;
13 10
 use Filament\Facades\Filament;
14 11
 use Filament\Forms\Components\DatePicker;
@@ -26,46 +23,39 @@ class ConfigureCompanyDefault
26 23
     public function handle(CompanyConfigured $event): void
27 24
     {
28 25
         $company = $event->company;
26
+        $companyId = $company->id;
29 27
 
30
-        session([
31
-            'current_company_id' => $company->id,
32
-            'default_language' => $company->locale->language ?? config('transmatic.source_locale'),
33
-            'default_timezone' => $company->locale->timezone ?? config('app.timezone'),
34
-            'default_pagination_page_option' => $company->appearance->records_per_page->value ?? RecordsPerPage::DEFAULT,
35
-            'default_sort' => $company->appearance->table_sort_direction->value ?? TableSortDirection::DEFAULT,
36
-            'default_primary_color' => $company->appearance->primary_color->value ?? PrimaryColor::DEFAULT,
37
-            'default_font' => $company->appearance->font->value ?? Font::DEFAULT,
38
-            'default_date_format' => $company->locale->date_format->value ?? DateFormat::DEFAULT,
39
-            'default_week_start' => $company->locale->week_start->value ?? WeekStart::DEFAULT,
40
-        ]);
28
+        session(['current_company_id' => $companyId]);
29
+
30
+        $settings = CompanySettingsService::getSettings($companyId);
41 31
 
42
-        app()->setLocale(session('default_language'));
43
-        locale_set_default(session('default_language'));
44
-        config(['app.timezone' => session('default_timezone')]);
45
-        date_default_timezone_set(session('default_timezone'));
32
+        app()->setLocale($settings['default_language']);
33
+        locale_set_default($settings['default_language']);
34
+        config(['app.timezone' => $settings['default_timezone']]);
35
+        date_default_timezone_set($settings['default_timezone']);
46 36
 
47 37
         $paginationPageOptions = RecordsPerPage::caseValues();
48 38
 
49
-        Table::configureUsing(static function (Table $table) use ($paginationPageOptions): void {
39
+        Table::configureUsing(static function (Table $table) use ($settings, $paginationPageOptions): void {
50 40
 
51 41
             $table
52 42
                 ->paginationPageOptions($paginationPageOptions)
53
-                ->defaultSort(column: 'id', direction: session('default_sort'))
54
-                ->defaultPaginationPageOption(session('default_pagination_page_option'));
43
+                ->defaultSort(column: 'id', direction: $settings['default_sort'])
44
+                ->defaultPaginationPageOption($settings['default_pagination_page_option']);
55 45
         }, isImportant: true);
56 46
 
57 47
         FilamentColor::register([
58
-            'primary' => PrimaryColor::from(session('default_primary_color'))->getColor(),
48
+            'primary' => PrimaryColor::from($settings['default_primary_color'])->getColor(),
59 49
         ]);
60 50
 
61 51
         Filament::getPanel('company')
62
-            ->font(session('default_font'))
52
+            ->font($settings['default_font'])
63 53
             ->brandName($company->name);
64 54
 
65
-        DatePicker::configureUsing(static function (DatePicker $component) {
55
+        DatePicker::configureUsing(static function (DatePicker $component) use ($settings) {
66 56
             $component
67
-                ->displayFormat(session('default_date_format'))
68
-                ->firstDayOfWeek(session('default_week_start'));
57
+                ->displayFormat($settings['default_date_format'])
58
+                ->firstDayOfWeek($settings['default_week_start']);
69 59
         });
70 60
 
71 61
         Tab::configureUsing(static function (Tab $tab) {

+ 93
- 0
app/Services/CompanySettingsService.php Vedi File

@@ -0,0 +1,93 @@
1
+<?php
2
+
3
+namespace App\Services;
4
+
5
+use App\Enums\Setting\DateFormat;
6
+use App\Enums\Setting\Font;
7
+use App\Enums\Setting\PrimaryColor;
8
+use App\Enums\Setting\RecordsPerPage;
9
+use App\Enums\Setting\TableSortDirection;
10
+use App\Enums\Setting\WeekStart;
11
+use App\Models\Company;
12
+use Illuminate\Support\Facades\Cache;
13
+
14
+class CompanySettingsService
15
+{
16
+    public static function getSettings(int $companyId): array
17
+    {
18
+        $cacheKey = "company_settings_{$companyId}";
19
+
20
+        return Cache::rememberForever($cacheKey, function () use ($companyId) {
21
+            $company = Company::with(['locale', 'appearance'])->find($companyId);
22
+
23
+            if (! $company) {
24
+                return self::getDefaultSettings();
25
+            }
26
+
27
+            return [
28
+                'default_language' => $company->locale->language ?? config('transmatic.source_locale'),
29
+                'default_timezone' => $company->locale->timezone ?? config('app.timezone'),
30
+                'default_currency' => $company->currency_code ?? 'USD',
31
+                'default_pagination_page_option' => $company->appearance->records_per_page->value ?? RecordsPerPage::DEFAULT,
32
+                'default_sort' => $company->appearance->table_sort_direction->value ?? TableSortDirection::DEFAULT,
33
+                'default_primary_color' => $company->appearance->primary_color->value ?? PrimaryColor::DEFAULT,
34
+                'default_font' => $company->appearance->font->value ?? Font::DEFAULT,
35
+                'default_date_format' => $company->locale->date_format->value ?? DateFormat::DEFAULT,
36
+                'default_week_start' => $company->locale->week_start->value ?? WeekStart::DEFAULT,
37
+            ];
38
+        });
39
+    }
40
+
41
+    public static function invalidateSettings(int $companyId): void
42
+    {
43
+        $cacheKey = "company_settings_{$companyId}";
44
+        Cache::forget($cacheKey);
45
+    }
46
+
47
+    public static function getDefaultSettings(): array
48
+    {
49
+        return [
50
+            'default_language' => config('transmatic.source_locale'),
51
+            'default_timezone' => config('app.timezone'),
52
+            'default_currency' => 'USD',
53
+            'default_pagination_page_option' => RecordsPerPage::DEFAULT,
54
+            'default_sort' => TableSortDirection::DEFAULT,
55
+            'default_primary_color' => PrimaryColor::DEFAULT,
56
+            'default_font' => Font::DEFAULT,
57
+            'default_date_format' => DateFormat::DEFAULT,
58
+            'default_week_start' => WeekStart::DEFAULT,
59
+        ];
60
+    }
61
+
62
+    public static function getSpecificSetting(int $companyId, string $key, $default = null)
63
+    {
64
+        $settings = self::getSettings($companyId);
65
+
66
+        return $settings[$key] ?? $default;
67
+    }
68
+
69
+    public static function getDefaultLanguage(int $companyId): string
70
+    {
71
+        return self::getSpecificSetting($companyId, 'default_language', config('transmatic.source_locale'));
72
+    }
73
+
74
+    public static function getDefaultTimezone(int $companyId): string
75
+    {
76
+        return self::getSpecificSetting($companyId, 'default_timezone', config('app.timezone'));
77
+    }
78
+
79
+    public static function getDefaultCurrency(int $companyId): string
80
+    {
81
+        return self::getSpecificSetting($companyId, 'default_currency', 'USD');
82
+    }
83
+
84
+    public static function getDefaultPaginationOption(int $companyId): int
85
+    {
86
+        return self::getSpecificSetting($companyId, 'default_pagination_page_option', RecordsPerPage::DEFAULT);
87
+    }
88
+
89
+    public static function getDefaultPrimaryColor(int $companyId): string
90
+    {
91
+        return self::getSpecificSetting($companyId, 'default_primary_color', PrimaryColor::DEFAULT);
92
+    }
93
+}

+ 3
- 3
package-lock.json Vedi File

@@ -1187,9 +1187,9 @@
1187 1187
             "license": "MIT"
1188 1188
         },
1189 1189
         "node_modules/electron-to-chromium": {
1190
-            "version": "1.5.65",
1191
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz",
1192
-            "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==",
1190
+            "version": "1.5.67",
1191
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz",
1192
+            "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==",
1193 1193
             "dev": true,
1194 1194
             "license": "ISC"
1195 1195
         },

Loading…
Annulla
Salva