schema(components: [ Forms\Components\Select::make('class_student_id') ->label('Siswa & Kelas') ->options(function () { $user = auth()->user(); $query = ClassStudent::with(['student', 'class']); if ($user->hasAnyRole(['admin'])) { return $query->get()->mapWithKeys(function ($cs) { return [ $cs->id => $cs->student->full_name . ' - ' . $cs->class->class_name . ' - ' . $cs->academicYear->name, ]; }); } else if ($user->hasAnyRole(['teacher'])) { $homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->firstOrFail(); $query->whereHas('class', function ($query) use ($homeRoomTeacher) { $query->where('id', $homeRoomTeacher->class_room_id); }); return $query->get()->mapWithKeys(function ($cs) { return [ $cs->id => $cs->student->full_name . ' - ' . $cs->class->class_name . ' - ' . $cs->academicYear->name, ]; }); } else { return []; } }) ->searchable() ->preload(), Forms\Components\Select::make('extracurricular_id') ->relationship('extracurricular', 'name') ->label('Extracurricular') ->options(Extracurricular::all()->pluck('name', 'id')) ->searchable() ->required(), Forms\Components\Select::make('semester') ->options([ 'first' => 'Ganjil', 'second' => 'Genap', ]) ->required(), Forms\Components\Select::make('predicate') ->label('Predicate') ->options([ 'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E', ]) ->required(), Forms\Components\Textarea::make('description') ->label('Description') ->required(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('classStudent.student.full_name') ->label('Student') ->searchable(), Tables\Columns\TextColumn::make('classStudent.class.class_name') ->label('Class') ->searchable(), Tables\Columns\TextColumn::make('classStudent.academicYear.name') ->label('Academic Year'), Tables\Columns\TextColumn::make('extracurricular.name') ->label('Extracurricular'), Tables\Columns\TextColumn::make('semester') ->formatStateUsing(function ($state) { return $state === 'first' ? 'Ganjil' : 'Genap'; }), Tables\Columns\TextColumn::make('predicate') ->label('Predicate') ->sortable(), Tables\Columns\TextColumn::make('description') ->label('Description'), ]) ->filters([ // ]) ->actions([ Tables\Actions\EditAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('admin') || auth()->user()->hasRole('teacher')), ]), ]) ->emptyStateActions([ Tables\Actions\CreateAction::make(), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListExtracurricularAssessments::route('/'), 'create' => Pages\CreateExtracurricularAssessment::route('/create'), 'edit' => Pages\EditExtracurricularAssessment::route('/{record}/edit'), ]; } }