diff --git a/packages/infolists/docs/02-entries/02-text.md b/packages/infolists/docs/02-entries/02-text.md index 95bde6d9234..3fd8bc5c554 100644 --- a/packages/infolists/docs/02-entries/02-text.md +++ b/packages/infolists/docs/02-entries/02-text.md @@ -47,6 +47,15 @@ TextEntry::make('created_at') ->dateTime() ``` +You may use also the `isoDate()` and `isoDateTime()` methods to format the entry's state using [PHP date formatting macro-formats](https://carbon.nesbot.com/docs/#available-macro-formats): + +```php +use Filament\Infolists\Components\TextEntry; + +TextEntry::make('created_at') + ->isoDateTime() +``` + You may use the `since()` method to format the entry's state using [Carbon's `diffForHumans()`](https://carbon.nesbot.com/docs/#api-humandiff): ```php @@ -56,7 +65,7 @@ TextEntry::make('created_at') ->since() ``` -Additionally, you can use the `dateTooltip()`, `dateTimeTooltip()` or `timeTooltip()` method to display a formatted date in a tooltip, often to provide extra information: +Additionally, you can use the `dateTooltip()`, `dateTimeTooltip()`, `timeTooltip()`, `isoDateTooltip()`, `isoDateTimeTooltip()`, `isoTime()` or `isoTimeTooltip()` method to display a formatted date in a tooltip, often to provide extra information: ```php use Filament\Infolists\Components\TextEntry; diff --git a/packages/infolists/src/Components/Concerns/CanFormatState.php b/packages/infolists/src/Components/Concerns/CanFormatState.php index ceb89ab0266..7fa36c32cb1 100644 --- a/packages/infolists/src/Components/Concerns/CanFormatState.php +++ b/packages/infolists/src/Components/Concerns/CanFormatState.php @@ -82,6 +82,35 @@ public function dateTime(string | Closure | null $format = null, ?string $timezo return $this; } + public function isoDate(?string $format = null): static + { + $this->isDate = true; + + $format ??= Schema::$defaultIsoDateDisplayFormat; + + $this->formatStateUsing(static function (TextEntry $component, $state) use ($format): ?string { + if (blank($state)) { + return null; + } + + return Carbon::parse($state) + ->isoFormat($format); + }); + + return $this; + } + + public function isoDateTime(?string $format = null): static + { + $this->isDateTime = true; + + $format ??= Schema::$defaultIsoDateTimeDisplayFormat; + + $this->isoDate($format); + + return $this; + } + public function since(?string $timezone = null): static { $this->isDateTime = true; @@ -149,6 +178,40 @@ public function sinceTooltip(?string $timezone = null): static return $this; } + public function isoDateTooltip(?string $format = null): static + { + $format ??= Schema::$defaultIsoDateDisplayFormat; + + $this->tooltip(static function (TextEntry $component, mixed $state) use ($format): ?string { + if (blank($state)) { + return null; + } + + return Carbon::parse($state) + ->isoFormat($format); + }); + + return $this; + } + + public function isoDateTimeTooltip(?string $format = null): static + { + $format ??= Schema::$defaultIsoDateTimeDisplayFormat; + + $this->isoDateTooltip($format); + + return $this; + } + + public function isoTimeTooltip(?string $format = null): static + { + $format ??= Schema::$defaultIsoTimeDisplayFormat; + + $this->isoDateTooltip($format); + + return $this; + } + public function money(string | Closure | null $currency = null, int $divideBy = 0, string | Closure | null $locale = null): static { $this->isMoney = true; @@ -223,6 +286,17 @@ public function time(string | Closure | null $format = null, ?string $timezone = return $this; } + public function isoTime(?string $format = null): static + { + $this->isTime = true; + + $format ??= Schema::$defaultIsoTimeDisplayFormat; + + $this->isoDate($format); + + return $this; + } + public function timezone(string | Closure | null $timezone): static { $this->timezone = $timezone; diff --git a/packages/schemas/src/Schema.php b/packages/schemas/src/Schema.php index d18253af37e..5c50e2e7bbe 100644 --- a/packages/schemas/src/Schema.php +++ b/packages/schemas/src/Schema.php @@ -48,12 +48,18 @@ class Schema extends ViewComponent public static string $defaultDateDisplayFormat = 'M j, Y'; + public static string $defaultIsoDateDisplayFormat = 'L'; + public static string $defaultDateTimeDisplayFormat = 'M j, Y H:i:s'; + public static string $defaultIsoDateTimeDisplayFormat = 'LLL'; + public static ?string $defaultNumberLocale = null; public static string $defaultTimeDisplayFormat = 'H:i:s'; + public static string $defaultIsoTimeDisplayFormat = 'LT'; + final public function __construct((Component & HasSchemas) | null $livewire = null) { $this->livewire($livewire); diff --git a/packages/tables/docs/02-columns/02-text.md b/packages/tables/docs/02-columns/02-text.md index b5f7c1da84b..52a8ad7ecce 100644 --- a/packages/tables/docs/02-columns/02-text.md +++ b/packages/tables/docs/02-columns/02-text.md @@ -73,6 +73,15 @@ TextColumn::make('created_at') ->dateTime() ``` +You may use also the `isoDate()` and `isoDateTime()` methods to format the column's state using [PHP date formatting macro-formats](https://carbon.nesbot.com/docs/#available-macro-formats): + +```php +use Filament\Tables\Columns\TextColumn; + +TextColumn::make('created_at') + ->isoDateTime() +``` + You may use the `since()` method to format the column's state using [Carbon's `diffForHumans()`](https://carbon.nesbot.com/docs/#api-humandiff): ```php @@ -82,7 +91,7 @@ TextColumn::make('created_at') ->since() ``` -Additionally, you can use the `dateTooltip()`, `dateTimeTooltip()` or `timeTooltip()` method to display a formatted date in a tooltip, often to provide extra information: +Additionally, you can use the `dateTooltip()`, `dateTimeTooltip()`, `timeTooltip()`, `isoDateTooltip()`, `isoDateTimeTooltip()`, `isoTime()` or `isoTimeTooltip()` method to display a formatted date in a tooltip, often to provide extra information: ```php use Filament\Tables\Columns\TextColumn; diff --git a/packages/tables/src/Columns/Concerns/CanFormatState.php b/packages/tables/src/Columns/Concerns/CanFormatState.php index 15f330eccd9..54f2a8a48c7 100644 --- a/packages/tables/src/Columns/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Concerns/CanFormatState.php @@ -82,6 +82,35 @@ public function dateTime(string | Closure | null $format = null, ?string $timezo return $this; } + public function isoDate(?string $format = null): static + { + $this->isDate = true; + + $format ??= Table::$defaultIsoDateDisplayFormat; + + $this->formatStateUsing(static function (TextColumn $column, $state) use ($format): ?string { + if (blank($state)) { + return null; + } + + return Carbon::parse($state) + ->isoFormat($format); + }); + + return $this; + } + + public function isoDateTime(?string $format = null): static + { + $this->isDateTime = true; + + $format ??= Table::$defaultIsoDateTimeDisplayFormat; + + $this->isoDate($format); + + return $this; + } + public function since(?string $timezone = null): static { $this->isDateTime = true; @@ -134,6 +163,40 @@ public function timeTooltip(string | Closure | null $format = null, ?string $tim return $this; } + public function isoDateTooltip(?string $format = null): static + { + $format ??= Table::$defaultIsoDateDisplayFormat; + + $this->tooltip(static function (TextColumn $column, mixed $state) use ($format): ?string { + if (blank($state)) { + return null; + } + + return Carbon::parse($state) + ->isoFormat($format); + }); + + return $this; + } + + public function isoDateTimeTooltip(?string $format = null): static + { + $format ??= Table::$defaultIsoDateTimeDisplayFormat; + + $this->isoDateTooltip($format); + + return $this; + } + + public function isoTimeTooltip(?string $format = null): static + { + $format ??= Table::$defaultIsoTimeDisplayFormat; + + $this->isoDateTooltip($format); + + return $this; + } + public function sinceTooltip(?string $timezone = null): static { $this->tooltip(static function (TextColumn $column, mixed $state) use ($timezone): ?string { @@ -223,6 +286,17 @@ public function time(string | Closure | null $format = null, ?string $timezone = return $this; } + public function isoTime(?string $format = null): static + { + $this->isTime = true; + + $format ??= Table::$defaultIsoTimeDisplayFormat; + + $this->isoDate($format); + + return $this; + } + public function timezone(string | Closure | null $timezone): static { $this->timezone = $timezone; diff --git a/packages/tables/src/Table.php b/packages/tables/src/Table.php index e7db9d0ab91..01081ba0ee8 100644 --- a/packages/tables/src/Table.php +++ b/packages/tables/src/Table.php @@ -63,12 +63,18 @@ class Table extends ViewComponent public static string $defaultDateDisplayFormat = 'M j, Y'; + public static string $defaultIsoDateDisplayFormat = 'L'; + public static string $defaultDateTimeDisplayFormat = 'M j, Y H:i:s'; + public static string $defaultIsoDateTimeDisplayFormat = 'LLL'; + public static ?string $defaultNumberLocale = null; public static string $defaultTimeDisplayFormat = 'H:i:s'; + public static string $defaultIsoTimeDisplayFormat = 'LT'; + final public function __construct(HasTable $livewire) { $this->livewire($livewire);