schema([ Forms\Components\Select::make('teacher_subject_id') ->label('Teacher Subject') ->required() ->relationship('teacherSubject', 'id') ->getOptionLabelFromRecordUsing(fn (TeacherSubject $record) => $record->teacher->name . ' - ' . $record->subject->name . ' - ' . $record->class->class_name . ' - ' . $record->academicYear->name) ->searchable() ->preload() ->afterStateUpdated(function (callable $set, $state) { if ($state) { $teacherSubject = TeacherSubject::find($state); if ($teacherSubject) { $set('student_id', null); } } }) ->required(), Forms\Components\Select::make('student_id') ->label('Student') ->required() ->searchable() ->options(function ($get) { $teacherSubjectId = $get('teacher_subject_id'); if ($teacherSubjectId) { $teacherSubject = TeacherSubject::find($teacherSubjectId); $students = ClassStudent::where('class_room_id', $teacherSubject->class_id) ->where('academic_year_id', $teacherSubject->academic_year_id) ->with('student') ->get() ->pluck('student.full_name', 'id') ->toArray(); return $students; } return []; }) ->getOptionLabelUsing(function ($value) { $student = Student::find($value); return $student ? $student->full_name . ' (' . $student->nis . ')' : null; }), Forms\Components\Select::make('semester') ->label('Semester') ->required() ->options([ 'first' => 'First Semester', 'second' => 'Second Semester' ]), Forms\Components\TextInput::make('score') ->label('Score') ->numeric() ->required() ->minValue(0) ->maxValue(100), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('student.full_name') ->label('Student') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('teacherSubject.class.class_name') ->label('Class') ->searchable(), Tables\Columns\TextColumn::make('teacherSubject.subject.name') ->label('Subject') ->searchable(), Tables\Columns\TextColumn::make('teacherSubject.teacher.name') ->label('Teacher') ->searchable(), Tables\Columns\TextColumn::make('score') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]) ->emptyStateActions([ Tables\Actions\CreateAction::make(), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListAssessments::route('/'), 'create' => Pages\CreateAssessment::route('/create'), 'edit' => Pages\EditAssessment::route('/{record}/edit'), 'multiple' => Pages\MultipleAssessments::route('/multiple'), ]; } }