Skip to content

Commit

Permalink
Merge pull request #14276 from agencetwogether/feature/date-iso
Browse files Browse the repository at this point in the history
Add feature to show date with iso format in Table & Infolist
  • Loading branch information
danharrin authored Feb 2, 2025
2 parents 6d2b147 + 25c308c commit 31c1e16
Show file tree
Hide file tree
Showing 6 changed files with 180 additions and 2 deletions.
11 changes: 10 additions & 1 deletion packages/infolists/docs/02-entries/02-text.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down
74 changes: 74 additions & 0 deletions packages/infolists/src/Components/Concerns/CanFormatState.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 6 additions & 0 deletions packages/schemas/src/Schema.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
11 changes: 10 additions & 1 deletion packages/tables/docs/02-columns/02-text.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down
74 changes: 74 additions & 0 deletions packages/tables/src/Columns/Concerns/CanFormatState.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down
6 changes: 6 additions & 0 deletions packages/tables/src/Table.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 31c1e16

Please sign in to comment.