tapp/filament-timezone-field

Filament timezone field.

v3.0.6 2024-05-29 20:43 UTC

This package is auto-updated.

Last update: 2024-11-29 21:54:48 UTC


README

Latest Version on Packagist Code Style Action Status Total Downloads

A timezone select field for Laravel Filament.

Installation

composer require tapp/filament-timezone-field:"^3.0"

Note For Filament 2.x check the 2.x branch

Usage

Form Field

Add to your Filament resource:

use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            // ...
            TimezoneSelect::make('timezone'),
            // ...
        ]);
}

Appareance

Filament Timezone Field

Options

To use GMT instead of UTC (default is UTC), add the ->timezoneType('GMT') method:

use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            // ...
            TimezoneSelect::make('timezone')
                ->timezoneType('GMT'),
            // ...
        ]);
}
List timezones by country

To list only the timezones for a country, you can pass the country code to ->byCountry() method. For example, to list only United States timezones:

TimezoneSelect::make('timezone')
    ->byCountry('US')

You can also pass an array with more than one country code:

TimezoneSelect::make('timezone')
    ->byCountry(['US', 'AU'])
List timezones by region

To list the timezones for a region use the ->byRegion() method. You can specify a region with a Region enum value:

use Tapp\FilamentTimezoneField\Enums\Region;

TimezoneSelect::make('timezone')
    ->byRegion(Region::Australia)

or you can use one of the PHP's DateTimeZone predifined constants:

use DateTimeZone;

TimezoneSelect::make('timezone')
    ->byRegion(DateTimeZone::AUSTRALIA)

It's also possible to pass an array with more than one region:

use Tapp\FilamentTimezoneField\Enums\Region;

TimezoneSelect::make('timezone')
    ->byRegion([Region::Australia, Region::America])

Tip

All Filament select field methods are available to use:

use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;

public static function form(Form $form): Form
{
   return $form
       ->schema([
           // ...
           TimezoneSelect::make('timezone')
               ->searchable()
               ->required(),
           // ...
       ]);
}

Optionally, hide either timezone offsets or timezone names, depending on your use case:

Filament Timezone Display Options

use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            // ...
            TimezoneSelect::make('timezone')
                ->hideNames(),
            // ...
        ]);
}
use Tapp\FilamentTimezoneField\Forms\Components\TimezoneSelect;

public static function form(Form $form): Form
{
    return $form
        ->schema([
            // ...
            TimezoneSelect::make('timezone')
                ->hideOffset(),
            // ...
        ]);
}

Table Column

use Tapp\FilamentTimezoneField\Tables\Columns\TimezoneColumn;

public static function table(Table $table): Table
{
    return $table
        ->columns([
            //...
            TimezoneColumn::make('timezone')
                ->timezoneType('GMT')
                ->formattedOffsetAndTimezone(),
        ])
        // ...
}

Options

Table Filter

use Tapp\FilamentTimezoneField\Tables\Filters\TimezoneSelectFilter;

public static function table(Table $table): Table
{
    return $table
        //...
        ->filters([
            TimezoneSelectFilter::make('timezone'),
            // ...
        ])
}