Skip to content

Commit

Permalink
Fix AutoRelationManager for v3
Browse files Browse the repository at this point in the history
  • Loading branch information
miguilimzero committed Aug 23, 2023
1 parent 2fa3938 commit 64c63b9
Showing 1 changed file with 22 additions and 52 deletions.
74 changes: 22 additions & 52 deletions src/AutoRelationManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@

use Filament\Forms\Form;
use Filament\Resources\RelationManagers\RelationManager;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Filament\Tables;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\Relations\MorphToMany;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Str;
use Miguilim\FilamentAutoResource\Filament\Actions\CreateAction as CreateActionModified;
use Miguilim\FilamentAutoResource\Filament\Actions\EditAction as EditActionModified;
use Miguilim\FilamentAutoResource\Generators\FormGenerator;
Expand All @@ -34,46 +32,45 @@ public function form(Form $form): Form
{
return $form
->schema(FormGenerator::makeFormSchema(
model: static::getRelationshipModelStatically(),
model: $this->getOwnerRecord(),
enumDictionary: static::$enumDictionary,
except: [static::getRelationshipStatically()->getForeignKeyName()]
))
->columns(3);
}

public function tableExtra(Table $table): Table
{
return $table;
}

public function table(Table $table): Table
{
$finalTable = $this->tableExtra($table);
$hasSoftDeletes = method_exists(static::getRelationshipModelStatically(), 'bootSoftDeletes');
$finalTable = $this->tableExtra($table);
$hasSoftDeletes = method_exists($this->getOwnerRecord(), 'bootSoftDeletes');

$defaultFilters = [];
$defaultFilters = [];
$defaultHeaderActions = [CreateActionModified::make()];
$defaultActions = [Tables\Actions\ViewAction::make(), EditActionModified::make()];
$defaultBulkActions = [Tables\Actions\DeleteBulkAction::make()];
$defaultActions = [Tables\Actions\ViewAction::make(), EditActionModified::make()];
$defaultBulkActions = [Tables\Actions\DeleteBulkAction::make()];

$relationshipInstance = static::getRelationshipStatically();


// Associate action
if(
method_exists(self::getRelationshipModelStatically(), static::getInverseRelationshipNameStatically())
if (
method_exists($this->getOwnerRecord(), $table->getInverseRelationship())
&& ($relationshipInstance instanceof HasMany || $relationshipInstance instanceof MorphMany)
) {
$defaultHeaderActions = [Tables\Actions\AssociateAction::make(), ...$defaultHeaderActions];
$defaultActions = [Tables\Actions\DissociateAction::make(), ...$defaultActions];
$defaultBulkActions = [Tables\Actions\DissociateBulkAction::make(), ...$defaultBulkActions];
$defaultActions = [Tables\Actions\DissociateAction::make(), ...$defaultActions];
$defaultBulkActions = [Tables\Actions\DissociateBulkAction::make(), ...$defaultBulkActions];
}

// Attach action
if($relationshipInstance instanceof BelongsToMany || $relationshipInstance instanceof MorphToMany) {
if ($relationshipInstance instanceof BelongsToMany || $relationshipInstance instanceof MorphToMany) {
$defaultHeaderActions = [Tables\Actions\AttachAction::make(), ...$defaultHeaderActions];
$defaultActions = [Tables\Actions\DetachAction::make(), ...$defaultActions];
$defaultBulkActions = [Tables\Actions\DetachBulkAction::make(), ...$defaultBulkActions];
$defaultActions = [Tables\Actions\DetachAction::make(), ...$defaultActions];
$defaultBulkActions = [Tables\Actions\DetachBulkAction::make(), ...$defaultBulkActions];
}

// Soft deletes
Expand All @@ -87,53 +84,26 @@ public function table(Table $table): Table
}

return $finalTable
->query(fn(Builder $builder): Builder => $builder
->withoutGlobalScopes(array_filter([
$hasSoftDeletes ? SoftDeletingScope::class : null,
]))
)
->columns(TableGenerator::makeTableSchema(
model: static::getRelationshipModelStatically(),
model: $this->getOwnerRecord(),
visibleColumns: static::$visibleColumns,
searchableColumns: static::$searchableColumns,
enumDictionary: static::$enumDictionary,
except: [static::getRelationshipStatically()->getForeignKeyName()],
except: [$this->getRelationship()->getForeignKeyName()],
))
->filters([...$finalTable->getFilters(), ...$defaultFilters])
->headerActions([...$finalTable->getHeaderActions(), ...$defaultHeaderActions])
->actions([...$finalTable->getActions(), ...$defaultActions])
->bulkActions([...$finalTable->getBulkActions(), ...$defaultBulkActions]);
}

protected function getTableQuery(): Builder
{
$parent = parent::getTableQuery();

if (method_exists(static::getRelationshipModelStatically(), 'bootSoftDeletes')) {
$parent->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}

return $parent;
}

public static function getIntrusive(): bool
{
return static::$intrusive;
}

protected static function getRelationshipStatically(): Relation
{
$dummy = new (static::$relatedResource::getModel());

return $dummy->{static::$relationship}();
}

protected static function getRelationshipModelStatically(): string
{
return static::getRelationshipStatically()->getRelated()::class;
}

protected static function getInverseRelationshipNameStatically(): string
{
return static::$inverseRelationship ?? (string) Str::of(class_basename(static::$relatedResource::getModel()))
->plural()
->camel();
}
}

0 comments on commit 64c63b9

Please sign in to comment.