refactor: update icon input handling in NavbarLinkResource to improve user experience and validation

This commit is contained in:
2025-12-03 19:51:10 -05:00
parent 67a8864c21
commit 2e2954fb59

View File

@@ -10,9 +10,27 @@ use Filament\Forms\Get;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class NavbarLinkResource extends Resource
{
protected static function normalizeIcon(?string $icon): ?string
{
if (empty($icon)) {
return null;
}
$icon = strtolower(trim($icon));
if ($icon === '') {
return null;
}
if (!str_starts_with($icon, 'ri-')) {
$icon = 'ri-' . ltrim($icon, '-');
}
return $icon;
}
protected static ?string $model = NavbarLink::class;
protected static ?string $navigationIcon = 'heroicon-o-bars-3';
@@ -248,47 +266,13 @@ class NavbarLinkResource extends Resource
])
->columns(2),
Forms\Components\Select::make('icon')
->label('Icon')
->searchable()
->options([
'ri-home-line' => 'Home',
'ri-dashboard-line' => 'Dashboard',
'ri-user-line' => 'User',
'ri-settings-line' => 'Settings',
'ri-file-line' => 'File',
'ri-folder-line' => 'Folder',
'ri-mail-line' => 'Mail',
'ri-phone-line' => 'Phone',
'ri-calendar-line' => 'Calendar',
'ri-time-line' => 'Time',
'ri-notification-line' => 'Notification',
'ri-search-line' => 'Search',
'ri-add-line' => 'Add',
'ri-edit-line' => 'Edit',
'ri-delete-line' => 'Delete',
'ri-arrow-right-line' => 'Arrow Right',
'ri-arrow-left-line' => 'Arrow Left',
'ri-arrow-up-line' => 'Arrow Up',
'ri-arrow-down-line' => 'Arrow Down',
'ri-link-line' => 'Link',
'ri-external-link-line' => 'External Link',
'ri-bookmark-line' => 'Bookmark',
'ri-star-line' => 'Star',
'ri-heart-line' => 'Heart',
'ri-eye-line' => 'Eye',
'ri-lock-line' => 'Lock',
'ri-unlock-line' => 'Unlock',
'ri-shield-line' => 'Shield',
'ri-check-line' => 'Check',
'ri-close-line' => 'Close',
'ri-information-line' => 'Information',
'ri-question-line' => 'Question',
'ri-warning-line' => 'Warning',
'ri-error-warning-line' => 'Error',
])
->placeholder('Select an icon')
->helperText('RemixIcon class name'),
Forms\Components\TextInput::make('icon')
->label('Icon Class')
->placeholder('ri-home-line or home-line')
->helperText('Use any Remix Icon (see https://github.com/Remix-Design/RemixIcon/blob/master/tags.json). Prefix is optional—we will auto-add `ri-`.')
->regex('/^(?:ri-)?[a-z0-9-]+$/i')
->maxLength(80)
->dehydrateStateUsing(fn ($state) => self::normalizeIcon($state)),
Forms\Components\Select::make('condition')
->label('Visibility Condition')