schema([ Section::make('Основная информация') ->description('Заполните основные данные о группе') ->collapsible() ->schema([ Grid::make(2) ->schema([ TextInput::make('title') ->label('Название группы') ->required() ->maxLength(50) ->placeholder('Например: ИВТ-21-1') ->helperText('Введите краткое название группы в принятом формате'), Select::make('faculty_id') ->label('Факультет') ->required() ->options(Faculty::query()->orderBy('title')->pluck('title', 'id')) ->searchable() ->preload() ->placeholder('Выберите факультет') ->helperText('Выберите факультет, к которому относится группа'), Select::make('education_form_id') ->label('Форма обучения') ->required() ->options(FormEducation::class) ->native(false) ->placeholder('Выберите форму обучения') ->helperText('Выберите форму обучения для группы'), ]), ]), ]); } public static function table(Table $table): Table { return $table ->columns([ TextColumn::make('id') ->label('ID') ->sortable() ->searchable() ->toggleable(isToggledHiddenByDefault: true), TextColumn::make('title') ->label('Название группы') ->sortable() ->searchable() ->description(fn ($record) => $record->faculty->title ?? ''), BadgeColumn::make('education_form_id') ->label('Форма обучения') ->formatStateUsing(fn ($state) => FormEducation::tryFrom($state)?->label()) ->color(fn ($state) => match($state) { FormEducation::FULL_TIME->value => 'success', FormEducation::PART_TIME->value => 'warning', default => 'gray', }) ->sortable(), TextColumn::make('created_at') ->label('Дата создания') ->dateTime('d.m.Y') ->sortable() ->toggleable(), ]) ->filters([ Tables\Filters\SelectFilter::make('faculty_id') ->label('Факультет') ->options(Faculty::query()->orderBy('title')->pluck('title', 'id')) ->searchable(), Tables\Filters\SelectFilter::make('education_form_id') ->label('Форма обучения') ->options(FormEducation::class), ]) ->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\ListEducationalGroups::route('/'), 'create' => Pages\CreateEducationalGroup::route('/create'), 'edit' => Pages\EditEducationalGroup::route('/{record}/edit'), ]; } }