schema([ Forms\Components\TextInput::make('name') ->required() ->maxLength(255), Forms\Components\Select::make('category_id') ->relationship('category', 'name') ->required(), Forms\Components\Textarea::make('description') ->maxLength(65535) ->columnSpanFull(), Forms\Components\TextInput::make('price') ->required() ->numeric() ->prefix('R'), Forms\Components\TextInput::make('stock') ->required() ->numeric() ->default(100), Forms\Components\FileUpload::make('images') ->multiple() ->disk('public') ->directory('products') ->reorderable() ->maxSize(5120) ->acceptedFileTypes(['image/jpeg', 'image/png', 'image/webp']), Forms\Components\Select::make('type') ->options([ 'wallpaper' => 'Wallpaper', 'mural' => 'Mural', ]) ->required(), Forms\Components\Select::make('printStocks') ->relationship('printStocks', 'name') ->multiple() ->preload(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\ImageColumn::make('images.image_path') ->label('Image') ->disk('public') ->getStateUsing(function ($record) { return $record->images->first()?->image_path; }) ->defaultImageUrl('/images/placeholder.png') ->circular() ->size(60), Tables\Columns\TextColumn::make('name') ->searchable(), Tables\Columns\TextColumn::make('category.name') ->sortable(), Tables\Columns\TextColumn::make('price') ->money('ZAR') ->sortable(), Tables\Columns\TextColumn::make('stock') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('type') ->badge() ->color(fn (string $state): string => match ($state) { 'wallpaper' => 'success', 'mural' => 'info', }), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('type') ->options([ 'wallpaper' => 'Wallpaper', 'mural' => 'Mural', ]), Tables\Filters\SelectFilter::make('category') ->relationship('category', 'name'), ]) ->actions([ // ]) ->bulkActions([ // ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListProducts::route('/'), 'create' => Pages\CreateProduct::route('/create'), 'edit' => Pages\EditProduct::route('/{record}/edit'), ]; } }