components([ FileUpload::make('image') ->label('Image') ->disk('ads') ->preserveFilenames() ->image() ->rules(['required', 'image', 'mimes:jpeg,png,jpg,gif']) ->validationMessages([ 'required' => 'Please upload an image.', 'image' => 'The file must be a valid image.', 'mimes' => 'Only JPEG, PNG, JPG, and GIF images are allowed.']) ->required() ->getUploadedFileNameForStorageUsing( fn (TemporaryUploadedFile $file): string => strtolower(str_replace([' ', '-', 'æ', 'ø', 'å'], ['_', '_', 'ae', 'oe', 'aa'], $file->getClientOriginalName())), ), ]); } #[\Override] public static function table(Table $table): Table { return $table ->columns([ Stack::make([ ImageColumn::make('image_url') ->label('') ->extraAttributes(['style' => 'image-rendering: pixelated']) ->size(125), TextColumn::make('image') ->label('') ->alignCenter() ->searchable(), ]), TextColumn::make('created_at') ->dateTime(), ]) ->filters([ ]) ->recordActions([ DeleteAction::make(), ]) ->searchable(); } #[\Override] public static function getPages(): array { return [ 'index' => ListWebsiteAds::route('/'), 'create' => CreateWebsiteAd::route('/create'), ]; } }