From ef3ed5679f5d01960fa56a22daa2e55b49ec049e Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 17 Sep 2024 17:44:45 +0200 Subject: [PATCH 1/5] 4.X Add feature to show date with iso format in Table & Infolist --- packages/infolists/docs/02-entries/02-text.md | 11 +++- .../Components/Concerns/CanFormatState.php | 63 +++++++++++++++++++ packages/schema/src/Schema.php | 6 ++ packages/tables/docs/02-columns/02-text.md | 11 +++- .../src/Columns/Concerns/CanFormatState.php | 63 +++++++++++++++++++ packages/tables/src/Table.php | 6 ++ 6 files changed, 158 insertions(+), 2 deletions(-) diff --git a/packages/infolists/docs/02-entries/02-text.md b/packages/infolists/docs/02-entries/02-text.md index 95bde6d9234..6660da69b4c 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()` 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 8e01b22e30d..8c3735bd719 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 $format = null, ?string $timezone = null): stat 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; diff --git a/packages/schema/src/Schema.php b/packages/schema/src/Schema.php index d07f23bffd3..1e1b47c2980 100644 --- a/packages/schema/src/Schema.php +++ b/packages/schema/src/Schema.php @@ -39,12 +39,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 $livewire) { $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..1e9843b9936 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()` 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 d9f82904347..266a2136a27 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 $format = null, ?string $timezone = null): stat 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 $format = null, ?string $timezone = null): s 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 { diff --git a/packages/tables/src/Table.php b/packages/tables/src/Table.php index 38a5fd00a80..e1ac6c33e85 100644 --- a/packages/tables/src/Table.php +++ b/packages/tables/src/Table.php @@ -62,12 +62,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); From c123820e148a7dd235cbb4ca5478a04c41785ac8 Mon Sep 17 00:00:00 2001 From: agencetwogether <53862310+agencetwogether@users.noreply.github.com> Date: Sun, 22 Dec 2024 14:08:00 +0100 Subject: [PATCH 2/5] add isoTime method --- .../tables/src/Columns/Concerns/CanFormatState.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/tables/src/Columns/Concerns/CanFormatState.php b/packages/tables/src/Columns/Concerns/CanFormatState.php index 266a2136a27..eb0472428b2 100644 --- a/packages/tables/src/Columns/Concerns/CanFormatState.php +++ b/packages/tables/src/Columns/Concerns/CanFormatState.php @@ -286,6 +286,17 @@ public function time(?string $format = null, ?string $timezone = null): static 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; From 7e640c419cbbd56a2eb2458ce0d997e32bd859b7 Mon Sep 17 00:00:00 2001 From: agencetwogether <53862310+agencetwogether@users.noreply.github.com> Date: Sun, 22 Dec 2024 14:09:03 +0100 Subject: [PATCH 3/5] Update 02-text.md to isoTime method --- packages/tables/docs/02-columns/02-text.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/tables/docs/02-columns/02-text.md b/packages/tables/docs/02-columns/02-text.md index 1e9843b9936..52a8ad7ecce 100644 --- a/packages/tables/docs/02-columns/02-text.md +++ b/packages/tables/docs/02-columns/02-text.md @@ -91,7 +91,7 @@ TextColumn::make('created_at') ->since() ``` -Additionally, you can use the `dateTooltip()`, `dateTimeTooltip()`, `timeTooltip()`, `isoDateTooltip()`, `isoDateTimeTooltip()` or `isoTimeTooltip()` 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; From 7ed19667aed86ec1d3b2429405d8ac17f33f0096 Mon Sep 17 00:00:00 2001 From: agencetwogether <53862310+agencetwogether@users.noreply.github.com> Date: Sun, 22 Dec 2024 14:10:12 +0100 Subject: [PATCH 4/5] add isoTime method --- .../src/Components/Concerns/CanFormatState.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/infolists/src/Components/Concerns/CanFormatState.php b/packages/infolists/src/Components/Concerns/CanFormatState.php index 8c3735bd719..cbe8f574c63 100644 --- a/packages/infolists/src/Components/Concerns/CanFormatState.php +++ b/packages/infolists/src/Components/Concerns/CanFormatState.php @@ -286,6 +286,17 @@ public function time(?string $format = null, ?string $timezone = null): static 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; From f700bb29ee4be553d161800150c0b28995c596f7 Mon Sep 17 00:00:00 2001 From: agencetwogether <53862310+agencetwogether@users.noreply.github.com> Date: Sun, 22 Dec 2024 14:11:15 +0100 Subject: [PATCH 5/5] Update 02-text.md to isoTime method --- packages/infolists/docs/02-entries/02-text.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/infolists/docs/02-entries/02-text.md b/packages/infolists/docs/02-entries/02-text.md index 6660da69b4c..3fd8bc5c554 100644 --- a/packages/infolists/docs/02-entries/02-text.md +++ b/packages/infolists/docs/02-entries/02-text.md @@ -65,7 +65,7 @@ TextEntry::make('created_at') ->since() ``` -Additionally, you can use the `dateTooltip()`, `dateTimeTooltip()`, `timeTooltip()`, `isoDateTooltip()`, `isoDateTimeTooltip()` or `isoTimeTooltip()` 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;