mohammadhprp/filament-ip-to-country-flag-column
Installation:
composer require mohammadhprp/filament-ip-to-country-flag-column
For Filament v2:
composer require mohammadhprp/filament-ip-to-country-flag-column:"^0.2.0"
Publish assets (if needed):
php artisan vendor:publish --provider="Mohammadhprp\IPToCountryFlagColumn\IPToCountryFlagColumnServiceProvider"
First Usage: Add the column to a Filament table resource:
use Mohammadhprp\IPToCountryFlagColumn\Columns\IPToCountryFlagColumn;
IPToCountryFlagColumn::make('ip_address_column_name')
->label('Country');
Display country flags for user IPs in a Filament admin panel table (e.g., UserResource):
// app/Filament/Resources/UserResource/Table.php
public function table(Table $table): Table
{
return $table
->columns([
// ... other columns
IPToCountryFlagColumn::make('ip_address')
->label('Location')
->flagPosition('right'), // Optional: Position flag
]);
}
Basic Integration:
IPToCountryFlagColumn::make('ip_column_name') in table definitions.Table builder (v1/v2).Dynamic IP Handling:
request()->ip()), use a computed column:
use Filament\Tables\Columns\Column;
Column::make('ip_address')
->getStateUsing(fn () => request()->ip())
->copyable()
->badge(),
IPToCountryFlagColumn::make('ip_address')
->label('Visitor Location'),
Caching for Performance:
Multi-Column Layouts:
IPToCountryFlagColumn::make('ip')
->label('Country')
->flagPosition('left'),
TextColumn::make('ip')
->label('IP Address')
->copyable(),
^0.2.0 constraint..env:
IP_TO_COUNTRY_FLAG_API_KEY=your_api_key_here
defaultFlag() to show a fallback (e.g., "?" or a neutral flag):
IPToCountryFlagColumn::make('ip')
->defaultFlag('🌍'); // Unicode fallback
API Rate Limits:
cache()->remember):
use Illuminate\Support\Facades\Cache;
IPToCountryFlagColumn::make('ip')
->getStateUsing(fn ($record) => Cache::remember(
"ip_flag_{$record->ip}",
now()->addHours(1),
fn () => $this->fetchFlagFromApi($record->ip)
));
IP Format Mismatches:
192.168.1.1 or 2001:0db8::1). Invalid IPs may break the column.Flag Position Conflicts:
flagPosition('left') with long text, the flag may overlap content.flagPosition('right') for right-aligned columns.Filament v1 vs. v2:
No Flags Displaying?:
.env.'8.8.8.8') to isolate issues.Slow Load Times:
Custom Flag Sources:
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->bind(
\Mohammadhprp\IPToCountryFlagColumn\Contracts\FlagFetcher::class,
\App\Services\CustomFlagFetcher::class
);
}
Styling:
.filament-ip-to-country-flag):
.filament-ip-to-country-flag img {
width: 24px;
height: auto;
border-radius: 4px;
}
Local Development:
// tests/TestCase.php
public function mockFlagApi()
{
\Mockery::mock('overload:' . \Mohammadhprp\IPToCountryFlagColumn\Contracts\FlagFetcher::class)
->shouldReceive('getFlag')
->andReturn('🇺🇸');
}
How can I help you explore Laravel packages today?