components([ Select::make('category_id') ->label('Kategoriýa') ->relationship('category', 'name') ->required() ->searchable() ->preload(), TextInput::make('name') ->label('Ady') ->required(), TextInput::make('slug') ->label('Slug') ->required() ->unique(ignoreRecord: true), TextInput::make('price') ->label('Bahasy') ->required() ->numeric() ->prefix('TMT'), TextInput::make('price_unit') ->label('Baha birligi') ->required() ->default('kg') ->placeholder('kg, sany, gram'), Select::make('availability_status') ->label('Elýeterliligi') ->required() ->options([ 'available' => 'Elýeterli', 'out_of_season' => 'Möwsümden daşary', 'low_stock' => 'Az galdy', ]) ->default('available'), Textarea::make('description') ->label('Beýany') ->rows(3) ->columnSpanFull(), FileUpload::make('image') ->label('Surat') ->image() ->disk('public') ->directory('products') ->columnSpanFull(), TextInput::make('sort_order') ->label('Tertip') ->required() ->numeric() ->default(0), Toggle::make('is_active') ->label('Işjeň') ->default(true), ]); } public static function table(Table $table): Table { return $table ->columns([ ImageColumn::make('image') ->label('Surat') ->square(), TextColumn::make('name') ->label('Ady') ->searchable(), TextColumn::make('category.name') ->label('Kategoriýa') ->badge() ->sortable(), TextColumn::make('price') ->label('Bahasy') ->formatStateUsing(fn ($state) => number_format($state, 2).' TMT') ->sortable(), TextColumn::make('price_unit') ->label('Birlik'), TextColumn::make('availability_status') ->label('Elýeterliligi') ->badge() ->color(fn (string $state): string => match ($state) { 'available' => 'success', 'out_of_season' => 'warning', 'low_stock' => 'danger', default => 'gray', }) ->formatStateUsing(fn (string $state): string => match ($state) { 'available' => 'Elýeterli', 'out_of_season' => 'Möwsümden daşary', 'low_stock' => 'Az galdy', default => $state, }), IconColumn::make('is_active') ->label('Işjeň') ->boolean(), TextColumn::make('sort_order') ->label('Tertip') ->numeric() ->sortable(), TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->defaultSort('sort_order') ->filters([ SelectFilter::make('category') ->relationship('category', 'name') ->label('Kategoriýa'), SelectFilter::make('availability_status') ->options([ 'available' => 'Elýeterli', 'out_of_season' => 'Möwsümden daşary', 'low_stock' => 'Az galdy', ]) ->label('Elýeterliligi'), ]) ->recordActions([ EditAction::make(), DeleteAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ DeleteBulkAction::make(), ]), ]); } public static function getPages(): array { return [ 'index' => ManageProducts::route('/'), ]; } }