diff --git a/app/Filament/Resources/Master/Courses/CourseResource.php b/app/Filament/Resources/Master/Courses/CourseResource.php index 1f6b851..9becb48 100644 --- a/app/Filament/Resources/Master/Courses/CourseResource.php +++ b/app/Filament/Resources/Master/Courses/CourseResource.php @@ -2,24 +2,13 @@ namespace App\Filament\Resources\Master\Courses; -use App\Enums\RoleEnum; -use App\Filament\Actions\Cheerful\DeleteAction; -use App\Filament\Actions\Cheerful\ForceDeleteAction; -use App\Filament\Actions\Cheerful\RestoreAction; -use App\Filament\Actions\DefaultBulkActions; -use App\Filament\Columns\RowIndexColumn; -use App\Filament\Columns\TimestampColumns; -use App\Filament\Resources\Master\Courses\Actions\EditCourseAction; use App\Filament\Resources\Master\Courses\Pages\ManageCourses; +use App\Filament\Resources\Master\Courses\Schemas\CourseForm; +use App\Filament\Resources\Master\Courses\Tables\CoursesTable; use App\Models\Course; use BackedEnum; -use Filament\Actions\BulkActionGroup; -use Filament\Forms\Components\TextInput; use Filament\Resources\Resource; use Filament\Schemas\Schema; -use Filament\Tables\Columns\TextColumn; -use Filament\Tables\Filters\TrashedFilter; -use Filament\Tables\Grouping\Group; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletingScope; @@ -41,110 +30,12 @@ class CourseResource extends Resource public static function form(Schema $schema): Schema { - return $schema - ->components([ - TextInput::make('code') - ->label('Kode') - ->placeholder('FSI419') - ->autocomplete(false) - ->required() - ->maxLength(20) - ->unique(ignoreRecord: true), - - TextInput::make('name') - ->label('Nama') - ->placeholder('Sistem Pendukung Keputusan') - ->autocomplete(false) - ->required() - ->maxLength(100), - - TextInput::make('credit') - ->label('SKS') - ->placeholder('2') - ->autocomplete(false) - ->required() - ->numeric() - ->minValue(1) - ->maxValue(6), - - TextInput::make('semester') - ->label('Semester') - ->placeholder('3') - ->autocomplete(false) - ->required() - ->numeric() - ->minValue(1) - ->maxValue(8) - ->helperText('Semester ke berapa mata kuliah ini diajarkan (1-8).'), - - TextInput::make('lecturer') - ->label('Dosen Pengampu') - ->placeholder('Ujang') - ->maxLength(100) - ->helperText('Masukkan nama dosen yang mengampu mata kuliah ini.') - ->required(), - - ]) - ->columns(1); + return CourseForm::configure($schema); } public static function table(Table $table): Table { - return $table - ->columns([ - ...RowIndexColumn::make(), - - TextColumn::make('name') - ->label('Nama') - ->searchable(query: function (Builder $query, string $search) { - $query->where('name', 'like', "%{$search}%") - ->orWhere('code', 'like', "%{$search}%"); - }) - ->sortable() - ->description(fn (Course $course) => $course->code), - - TextColumn::make('credit') - ->label('SKS') - ->sortable(), - - TextColumn::make('lecturer') - ->label('Dosen Pengampu') - ->placeholder('Belum ditentukan') - ->searchable(), - - ...TimestampColumns::make(), - ]) - ->filters([ - TrashedFilter::make() - ->native(false) - ->visible(fn () => auth()->user()->hasRole(RoleEnum::Developer)), - ]) - ->recordActions([ - EditCourseAction::make(), - - DeleteAction::make(), - - ForceDeleteAction::make(), - - RestoreAction::make(), - ]) - ->toolbarActions([ - BulkActionGroup::make([ - ...DefaultBulkActions::make('Mata Kuliah'), - ]), - ]) - ->emptyStateIcon('heroicon-o-rectangle-stack') - ->emptyStateDescription('Setelah Anda membuat data pertama, maka akan muncul disini.') - ->defaultSort('code', 'desc') - ->defaultGroup('semester') - ->groups([ - Group::make('semester') - ->label('Semester') - ->getTitleFromRecordUsing(fn (Course $record): string => 'Semester '.$record->semester) - ->collapsible(), - ]) - ->deferFilters(false) - ->paginated(false); + return CoursesTable::configure($table); } public static function getPages(): array diff --git a/app/Filament/Resources/Master/Courses/Schemas/CourseForm.php b/app/Filament/Resources/Master/Courses/Schemas/CourseForm.php new file mode 100644 index 0000000..cc930fe --- /dev/null +++ b/app/Filament/Resources/Master/Courses/Schemas/CourseForm.php @@ -0,0 +1,58 @@ +components([ + TextInput::make('code') + ->label('Kode') + ->placeholder('FSI419') + ->autocomplete(false) + ->required() + ->maxLength(20) + ->unique(ignoreRecord: true), + + TextInput::make('name') + ->label('Nama') + ->placeholder('Sistem Pendukung Keputusan') + ->autocomplete(false) + ->required() + ->maxLength(100), + + TextInput::make('credit') + ->label('SKS') + ->placeholder('2') + ->autocomplete(false) + ->required() + ->numeric() + ->minValue(1) + ->maxValue(6), + + TextInput::make('semester') + ->label('Semester') + ->placeholder('3') + ->autocomplete(false) + ->required() + ->numeric() + ->minValue(1) + ->maxValue(8) + ->helperText('Semester ke berapa mata kuliah ini diajarkan (1-8).'), + + TextInput::make('lecturer') + ->label('Dosen Pengampu') + ->placeholder('Ujang') + ->maxLength(100) + ->helperText('Masukkan nama dosen yang mengampu mata kuliah ini.') + ->required(), + + ]) + ->columns(1); + } +} diff --git a/app/Filament/Resources/Master/Courses/Tables/CoursesTable.php b/app/Filament/Resources/Master/Courses/Tables/CoursesTable.php new file mode 100644 index 0000000..898544e --- /dev/null +++ b/app/Filament/Resources/Master/Courses/Tables/CoursesTable.php @@ -0,0 +1,81 @@ +columns([ + ...RowIndexColumn::make(), + + TextColumn::make('name') + ->label('Nama') + ->searchable(query: function (Builder $query, string $search) { + $query->where('name', 'like', "%{$search}%") + ->orWhere('code', 'like', "%{$search}%"); + }) + ->sortable() + ->description(fn (Course $course) => $course->code), + + TextColumn::make('credit') + ->label('SKS') + ->sortable(), + + TextColumn::make('lecturer') + ->label('Dosen Pengampu') + ->placeholder('Belum ditentukan') + ->searchable(), + + ...TimestampColumns::make(), + ]) + ->filters([ + TrashedFilter::make() + ->native(false) + ->visible(fn () => auth()->user()->hasRole(RoleEnum::Developer)), + ]) + ->recordActions([ + EditCourseAction::make(), + + DeleteAction::make(), + + ForceDeleteAction::make(), + + RestoreAction::make(), + ]) + ->toolbarActions([ + BulkActionGroup::make([ + ...DefaultBulkActions::make('Mata Kuliah'), + ]), + ]) + ->emptyStateIcon('heroicon-o-rectangle-stack') + ->emptyStateDescription('Setelah Anda membuat data pertama, maka akan muncul disini.') + ->defaultSort('code', 'desc') + ->defaultGroup('semester') + ->groups([ + Group::make('semester') + ->label('Semester') + ->getTitleFromRecordUsing(fn (Course $record): string => 'Semester '.$record->semester) + ->collapsible(), + ]) + ->deferFilters(false) + ->paginated(false); + } +}