components([ TextInput::make('badge_key') ->required() ->label('Badge Key - Expl. ATOM101') ->placeholder('This is the badge code'), TextInput::make('badge_name') ->required() ->label('Badge Name') ->placeholder('This is the name of the badge: Expl. The ATOM Badge'), Textarea::make('badge_description') ->required() ->label('Badge Description') ->placeholder('Please add a description for the badge.'), ]); } #[\Override] public static function table(Table $table): Table { $settingsService = app(SettingsService::class); $badgesPath = $settingsService->getOrDefault('badges_path', '/gamedata/c_images/album1584/'); return $table ->columns([ ImageColumn::make('badge_key') ->label('Badge Image') ->getStateUsing(function ($record) use ($badgesPath) { $badgeName = str_replace('badge_desc_', '', $record->badge_key); return asset($badgesPath . $badgeName . '.gif'); }) ->width(50) ->height(50), TextColumn::make('badge_name') ->label('Badge Code & Name') ->formatStateUsing(fn ($record) => $record->badge_key . ' : ' . $record->badge_name) ->searchable(query: function ($query, $search) { $query->where('badge_key', 'like', "%{$search}%") ->orWhere('badge_name', 'like', "%{$search}%"); }) ->sortable(), TextColumn::make('badge_description') ->label('Badge Description') ->getStateUsing(fn ($record) => Str::limit($record->badge_description, 65)) ->searchable(), ]) ->filters([]) ->defaultSort('badge_key', 'asc') ->recordActions([ EditAction::make(), DeleteAction::make(), ]); } #[\Override] public static function getPages(): array { return [ 'index' => ListBadgeTextEditors::route('/'), 'create' => CreateBadgeTextEditor::route('/create'), 'edit' => EditBadgeTextEditor::route('/{record}/edit'), ]; } }