From 2b6f808db1c68260606c45eb8ed88b43ef5dffe3 Mon Sep 17 00:00:00 2001 From: Ashwin Chandran Date: Fri, 21 Aug 2026 09:20:02 +0200 Subject: [PATCH 1/2] Render dashboard date times fields in the configured display timezone Co-Authored-By: Claude Fable 5 --- src/CachetDashboardServiceProvider.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/CachetDashboardServiceProvider.php b/src/CachetDashboardServiceProvider.php index 4e3efa83..d30b8a6f 100644 --- a/src/CachetDashboardServiceProvider.php +++ b/src/CachetDashboardServiceProvider.php @@ -17,6 +17,7 @@ use Filament\PanelProvider; use Filament\Schemas\Components\Section; use Filament\Support\Colors\Color; +use Filament\Support\Facades\FilamentTimezone; use Filament\View\PanelsRenderHook; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; @@ -111,6 +112,12 @@ public function panel(Panel $panel): Panel ->path(Cachet::dashboardPath()) ->bootUsing(function (): void { Section::configureUsing(fn (Section $section) => $section->columnSpanFull()); + + FilamentTimezone::set(function (): ?string { + $timezone = rescue(fn () => app(AppSettings::class)->timezone, null, report: false); + + return $timezone === '-' ? null : $timezone; + }); }); } } From 45b0c9390221707c3d30476986eca8781c53155e Mon Sep 17 00:00:00 2001 From: Ashwin Chandran Date: Fri, 21 Aug 2026 09:20:25 +0200 Subject: [PATCH 2/2] Test for Dashboard TZ translation Co-Authored-By: Claude Fable 5 --- .../Filament/DashboardTimezoneTest.php | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 tests/Feature/Filament/DashboardTimezoneTest.php diff --git a/tests/Feature/Filament/DashboardTimezoneTest.php b/tests/Feature/Filament/DashboardTimezoneTest.php new file mode 100644 index 00000000..69fff94f --- /dev/null +++ b/tests/Feature/Filament/DashboardTimezoneTest.php @@ -0,0 +1,59 @@ +create(['is_admin' => true])); +}); + +it('renders dashboard date times in the configured display timezone', function () { + $settings = app(AppSettings::class); + $settings->timezone = 'Europe/Berlin'; + $settings->save(); + + $incident = Incident::factory()->create(['occurred_at' => '2026-08-06 13:01:37']); + + livewire(EditIncident::class, ['record' => $incident->getKey()]) + ->assertSet('data.occurred_at', '2026-08-06 15:01:37'); +}); + +it('stores dashboard-edited date times in the application timezone', function () { + $settings = app(AppSettings::class); + $settings->timezone = 'Europe/Berlin'; + $settings->save(); + + $incident = Incident::factory()->create(); + + livewire(EditIncident::class, ['record' => $incident->getKey()]) + ->fillForm(['occurred_at' => '2026-08-06 15:01:37']) + ->call('save') + ->assertHasNoFormErrors(); + + $this->assertDatabaseHas('incidents', [ + 'id' => $incident->id, + 'occurred_at' => '2026-08-06 13:01:37', + ]); +}); + +it('falls back to the application timezone when the browser default sentinel is configured', function () { + $settings = app(AppSettings::class); + $settings->timezone = '-'; + $settings->save(); + + $incident = Incident::factory()->create(['occurred_at' => '2026-08-06 13:01:37']); + + livewire(EditIncident::class, ['record' => $incident->getKey()]) + ->assertSet('data.occurred_at', '2026-08-06 13:01:37'); +});