schema([ Forms\Components\TextInput::make('title') ->required() ->maxLength(255) ->live(onBlur: true) ->afterStateUpdated(fn ($state, $set) => $set('slug', \Illuminate\Support\Str::slug($state))), Forms\Components\TextInput::make('slug') ->required() ->maxLength(255) ->unique(ignoreRecord: true), Forms\Components\RichEditor::make('description') ->columnSpanFull(), Forms\Components\Select::make('level_id') ->label('JLPT Level') ->relationship('level', 'code') ->searchable() ->preload() ->required(), Forms\Components\TextInput::make('price') ->numeric() ->prefix('IDR') ->maxValue(42949672.95), Forms\Components\FileUpload::make('thumbnail_url') ->label('Thumbnail Image') ->image() ->disk('r2') ->directory('thumbnails') ->visibility('public') ->imageEditor(), Forms\Components\Select::make('teacher_id') ->relationship('teacher', 'name') ->searchable() ->preload() ->required(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\ImageColumn::make('thumbnail_url') ->disk('r2') ->visibility('public'), Tables\Columns\TextColumn::make('title') ->searchable(), Tables\Columns\TextColumn::make('level.code') ->label('Level') ->badge(), Tables\Columns\TextColumn::make('price') ->money('IDR'), Tables\Columns\TextColumn::make('teacher.name') ->sortable(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => ListCourses::route('/'), 'create' => CreateCourse::route('/create'), 'edit' => EditCourse::route('/{record}/edit'), ]; } public static function getRecordRouteBindingEloquentQuery(): Builder { return parent::getRecordRouteBindingEloquentQuery() ->withoutGlobalScopes([ SoftDeletingScope::class, ]); } }