states, and pulls data from the authenticated /api/v1/tenant/packages endpoint.
(resources/js/admin/pages/EventFormPage.tsx, resources/js/admin/api.ts)
- Harden tenant-admin auth flow: prevent PKCE state loss, scope out StrictMode double-processing, add SPA
routes for /event-admin/login and /event-admin/logout, and tighten token/session clearing semantics (resources/js/admin/auth/{context,tokens}.tsx, resources/js/admin/pages/{AuthCallbackPage,LogoutPage}.tsx,
resources/js/admin/router.tsx, routes/web.php)
70 lines
2.7 KiB
PHP
70 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Resources\RefreshTokenResource\RelationManagers;
|
|
|
|
use Filament\Resources\RelationManagers\RelationManager;
|
|
use Filament\Tables;
|
|
use Filament\Tables\Table;
|
|
|
|
class AuditsRelationManager extends RelationManager
|
|
{
|
|
protected static string $relationship = 'audits';
|
|
|
|
public function table(Table $table): Table
|
|
{
|
|
return $table
|
|
->recordTitleAttribute('event')
|
|
->defaultSort('created_at', 'desc')
|
|
->columns([
|
|
Tables\Columns\TextColumn::make('created_at')
|
|
->label(__('admin.refresh_tokens.audit.performed_at'))
|
|
->dateTime()
|
|
->sortable(),
|
|
Tables\Columns\TextColumn::make('event')
|
|
->label(__('admin.refresh_tokens.audit.event'))
|
|
->badge()
|
|
->formatStateUsing(function (?string $state): ?string {
|
|
if (! $state) {
|
|
return null;
|
|
}
|
|
|
|
$key = "admin.refresh_tokens.audit.events.{$state}";
|
|
$translated = __($key);
|
|
|
|
return $translated === $key ? $state : $translated;
|
|
}),
|
|
Tables\Columns\TextColumn::make('performedBy.name')
|
|
->label(__('admin.refresh_tokens.audit.performed_by'))
|
|
->placeholder('—')
|
|
->toggleable(),
|
|
Tables\Columns\TextColumn::make('ip_address')
|
|
->label(__('admin.refresh_tokens.audit.ip_address'))
|
|
->toggleable(),
|
|
Tables\Columns\TextColumn::make('context')
|
|
->label(__('admin.refresh_tokens.audit.context'))
|
|
->formatStateUsing(function ($state): string {
|
|
if (! is_array($state) || empty($state)) {
|
|
return '—';
|
|
}
|
|
|
|
return collect($state)
|
|
->filter(fn ($value) => filled($value))
|
|
->map(function ($value, $key) {
|
|
if (is_array($value)) {
|
|
$value = json_encode($value);
|
|
}
|
|
|
|
return "{$key}: {$value}";
|
|
})
|
|
->implode(', ');
|
|
})
|
|
->wrap()
|
|
->toggleable(),
|
|
])
|
|
->filters([])
|
|
->paginated([10, 25, 50])
|
|
->emptyStateHeading(__('admin.refresh_tokens.audit.empty.heading'))
|
|
->emptyStateDescription(__('admin.refresh_tokens.audit.empty.description'));
|
|
}
|
|
}
|