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'), ]; } }