schema([ Section::make('Основная информация') ->description('Заполните данные о категории программ ДПО') ->collapsible() ->schema([ Grid::make(2) ->schema([ TextInput::make('title') ->label('Название категории') ->required() ->maxLength(255) ->placeholder('Например: "Профессиональная переподготовка"') ->live(onBlur: true) ->afterStateUpdated(function (string $operation, ?string $state, Forms\Set $set) { $set('slug', Str::slug($state)); }) ->helperText('Укажите понятное название категории'), TextInput::make('slug') ->label('URL-идентификатор') ->required() ->maxLength(255) ->unique(ignoreRecord: true) ->helperText('Человеко-понятный URL для категории'), Select::make('dir_addit_educat_id') ->label('Направление ДПО') ->options( DirectionAdditionalEducation::where('is_active', true) ->orderBy('title') ->pluck('title', 'id') ) ->required() ->preload() ->searchable() ->placeholder('Выберите направление') ->helperText('К какому направлению относится категория'), ]), Toggle::make('is_active') ->label('Активная категория') ->inline(false) ->default(true) ->helperText('Отображать ли категорию на сайте') ->columnSpanFull(), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('title') ->label('Название') ->searchable() ->sortable() ->description(fn ($record) => $record->direction->title ?? '') ->limit(50), BadgeColumn::make('direction.title') ->label('Направление') ->sortable() ->searchable() ->color('primary'), IconColumn::make('is_active') ->label('Активна') ->boolean() ->trueIcon('heroicon-o-check-circle') ->falseIcon('heroicon-o-x-circle') ->trueColor('success') ->falseColor('danger') ->sortable(), TextColumn::make('updated_at') ->label('Обновлено') ->dateTime('d.m.Y H:i') ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('dir_addit_educat_id') ->label('Направление ДПО') ->options( DirectionAdditionalEducation::where('is_active', true) ->orderBy('title') ->pluck('title', 'id') ) ->searchable(), Tables\Filters\TernaryFilter::make('is_active') ->label('Только активные') ->placeholder('Все') ->trueLabel('Активные') ->falseLabel('Неактивные'), ]) ->actions([ Tables\Actions\EditAction::make() ->iconButton() ->tooltip('Редактировать'), Tables\Actions\ViewAction::make() ->iconButton() ->tooltip('Просмотреть'), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make() ->label('Удалить выбранные') ->modalHeading('Удаление категорий') ->modalDescription('Вы уверены, что хотите удалить выбранные категории ДПО?'), ]), ]) ->emptyStateActions([ Tables\Actions\CreateAction::make() ->label('Добавить категорию'), ]) ->defaultSort('title'); } public static function getRelations(): array { return []; } public static function getPages(): array { return [ 'index' => Pages\ListAdditionalEducationCategories::route('/'), 'create' => Pages\CreateAdditionalEducationCategory::route('/create'), 'edit' => Pages\EditAdditionalEducationCategory::route('/{record}/edit'), ]; } }