Skip to content

Commit 0201be1

Browse files
committed
fix: sets users timezone in filament by default
1 parent 0af2327 commit 0201be1

File tree

1 file changed

+46
-15
lines changed

1 file changed

+46
-15
lines changed

src/Filament/Plugins/UserTimeZonePlugin.php

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,83 @@
11
<?php
22
namespace CustomD\LaravelHelpers\Filament\Plugins;
33

4+
use Closure;
45
use Filament\Panel;
5-
use Livewire\Livewire;
66
use Filament\Contracts\Plugin;
7+
use Illuminate\Support\HtmlString;
78
use Filament\Tables\Columns\TextColumn;
9+
use Illuminate\Contracts\Support\Htmlable;
810
use Filament\Infolists\Components\TextEntry;
911
use Filament\Forms\Components\DateTimePicker;
1012
use CustomD\LaravelHelpers\Http\Middleware\UserTimeZone;
11-
use Illuminate\Contracts\Support\Htmlable;
12-
use Illuminate\Support\HtmlString;
1313

1414
class UserTimeZonePlugin implements Plugin
1515
{
16+
17+
protected bool $withDateHelperText = true;
18+
19+
protected ?Closure $additionalDateConfigs = null;
20+
21+
1622
public static function make(): self
1723
{
1824
return new self();
1925
}
2026

27+
public function hideDateHelperText(bool $disabled = true): self
28+
{
29+
$this->withDateHelperText = !$disabled;
30+
return $this;
31+
}
32+
33+
public function setAdditionalDateConfigs(Closure $callback): self
34+
{
35+
$this->additionalDateConfigs = $callback;
36+
return $this;
37+
}
38+
2139
public function getId(): string
2240
{
2341
return 'custom-date-time-input-timezone';
2442
}
2543

2644
public function register(Panel $panel): void
2745
{
28-
Livewire::addPersistentMiddleware([
29-
UserTimeZone::class,
30-
]);
3146

3247
$panel->middleware([
3348
UserTimeZone::class,
34-
]);
49+
], true);
3550
}
3651

3752
public function boot(Panel $panel): void
3853
{
3954

40-
$timezone = config('request.user.timezone') ?? config('app.timezone') ?? 'UTC';
41-
if (is_string($timezone) === false || blank($timezone)) {
42-
$timezone = 'UTC';
43-
}
55+
56+
$timezone = function() {
57+
$tz = config('request.user.timezone') ?? config('app.timezone') ?? 'UTC';
58+
if (is_string($tz) === false || blank($tz)) {
59+
$tz = 'UTC';
60+
}
61+
return $tz;
62+
};
63+
4464

4565
DateTimePicker::configureUsing(
46-
fn (DateTimePicker $dateTimePicker): DateTimePicker => $dateTimePicker->timezone($timezone)
47-
->helperText(
48-
fn(DateTimePicker $component): Htmlable => new HtmlString("Using the <b><i>{$component->getTimezone()}</i></b> timezone")
49-
)
66+
function (DateTimePicker $dateTimePicker) use ($timezone): DateTimePicker {
67+
$dateTimePicker->timezone($timezone)
68+
69+
->helperText(
70+
fn(DateTimePicker $component): ?Htmlable => $this->withDateHelperText ? new HtmlString("Using the <b><i>{$component->getTimezone()}</i></b> timezone") : null
71+
);
72+
73+
if($this->additionalDateConfigs){
74+
$call = $this->additionalDateConfigs;
75+
$call($dateTimePicker);
76+
}
77+
78+
return $dateTimePicker;
79+
80+
}
5081
);
5182

5283
TextColumn::configureUsing(

0 commit comments

Comments
 (0)