mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
feature: Better relation manager tab customization
This commit is contained in:
@@ -71,6 +71,13 @@ trait HasRelationManagers
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getContentTabComponent(): Tab
|
||||
{
|
||||
return Tab::make($this->getContentTabLabel())
|
||||
->icon($this->getContentTabIcon())
|
||||
->schema($this->getContentComponents());
|
||||
}
|
||||
|
||||
public function getContentTabLabel(): ?string
|
||||
{
|
||||
return null;
|
||||
@@ -121,21 +128,14 @@ trait HasRelationManagers
|
||||
$tabKey = strval($tabKey);
|
||||
|
||||
if (blank($tabKey) && $hasCombinedRelationManagerTabsWithContent) {
|
||||
return Tab::make($this->getContentTabLabel())
|
||||
->icon($this->getContentTabIcon())
|
||||
->schema($this->getContentComponents());
|
||||
return $this->getContentTabComponent();
|
||||
}
|
||||
|
||||
if ($manager instanceof RelationGroup) {
|
||||
$manager->ownerRecord($ownerRecord);
|
||||
$manager->pageClass(static::class);
|
||||
|
||||
return Tab::make($manager->getLabel())
|
||||
->badge($manager->getBadge())
|
||||
->badgeColor($manager->getBadgeColor())
|
||||
->badgeTooltip($manager->getBadgeTooltip())
|
||||
->icon($manager->getIcon())
|
||||
->iconPosition($manager->getIconPosition())
|
||||
return $manager->getTabComponent()
|
||||
->schema(fn (): array => collect($manager->getManagers())
|
||||
->map(fn ($groupedManager, $groupedManagerKey): Livewire => Livewire::make(
|
||||
$normalizedGroupedManagerClass = $this->normalizeRelationManagerClass($groupedManager),
|
||||
@@ -146,12 +146,7 @@ trait HasRelationManagers
|
||||
|
||||
$normalizedManagerClass = $this->normalizeRelationManagerClass($manager);
|
||||
|
||||
return Tab::make($normalizedManagerClass::getTitle($ownerRecord, static::class))
|
||||
->badge($normalizedManagerClass::getBadge($ownerRecord, static::class))
|
||||
->badgeColor($normalizedManagerClass::getBadgeColor($ownerRecord, static::class))
|
||||
->badgeTooltip($normalizedManagerClass::getBadgeTooltip($ownerRecord, static::class))
|
||||
->icon($normalizedManagerClass::getIcon($ownerRecord, static::class))
|
||||
->iconPosition($normalizedManagerClass::getIconPosition($ownerRecord, static::class))
|
||||
return $normalizedManagerClass::getTabComponent($ownerRecord, static::class)
|
||||
->schema(fn (): array => [
|
||||
Livewire::make(
|
||||
$normalizedManagerClass,
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Filament\Resources\RelationManagers;
|
||||
|
||||
use Closure;
|
||||
use Filament\Schemas\Components\Tabs\Tab;
|
||||
use Filament\Support\Components\Component;
|
||||
use Filament\Support\Concerns\HasIcon;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
@@ -21,6 +22,8 @@ class RelationGroup extends Component
|
||||
|
||||
protected ?string $pageClass = null;
|
||||
|
||||
protected ?Closure $modifyTabUsing = null;
|
||||
|
||||
/**
|
||||
* @param array<class-string<RelationManager> | RelationManagerConfiguration> $managers
|
||||
*/
|
||||
@@ -80,6 +83,13 @@ class RelationGroup extends Component
|
||||
return $this->evaluate($this->label);
|
||||
}
|
||||
|
||||
public function tab(?Closure $callback): static
|
||||
{
|
||||
$this->modifyTabUsing = $callback;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<class-string<RelationManager> | RelationManagerConfiguration>
|
||||
*/
|
||||
@@ -164,4 +174,18 @@ class RelationGroup extends Component
|
||||
default => parent::resolveDefaultClosureDependencyForEvaluationByType($parameterType),
|
||||
};
|
||||
}
|
||||
|
||||
public function getTabComponent(): Tab
|
||||
{
|
||||
$tab = Tab::make($this->getLabel())
|
||||
->badge($this->getBadge())
|
||||
->badgeColor($this->getBadgeColor())
|
||||
->badgeTooltip($this->getBadgeTooltip())
|
||||
->icon($this->getIcon())
|
||||
->iconPosition($this->getIconPosition());
|
||||
|
||||
return $this->evaluate($this->modifyTabUsing, [
|
||||
'tab' => $tab,
|
||||
]) ?? $tab;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ use Filament\Resources\Concerns\InteractsWithRelationshipTable;
|
||||
use Filament\Resources\Pages\ViewRecord;
|
||||
use Filament\Schemas\Components\RenderHook;
|
||||
use Filament\Schemas\Components\TableBuilder;
|
||||
use Filament\Schemas\Components\Tabs\Tab;
|
||||
use Filament\Schemas\Schema;
|
||||
use Filament\Support\Concerns\CanBeLazy;
|
||||
use Filament\Support\Enums\IconPosition;
|
||||
@@ -136,6 +137,16 @@ class RelationManager extends Component implements Actions\Contracts\HasActions,
|
||||
return [];
|
||||
}
|
||||
|
||||
public static function getTabComponent(Model $ownerRecord, string $pageClass): Tab
|
||||
{
|
||||
return Tab::make(static::class::getTitle($ownerRecord, $pageClass))
|
||||
->badge(static::class::getBadge($ownerRecord, $pageClass))
|
||||
->badgeColor(static::class::getBadgeColor($ownerRecord, $pageClass))
|
||||
->badgeTooltip(static::class::getBadgeTooltip($ownerRecord, $pageClass))
|
||||
->icon(static::class::getIcon($ownerRecord, $pageClass))
|
||||
->iconPosition(static::class::getIconPosition($ownerRecord, $pageClass));
|
||||
}
|
||||
|
||||
public static function getIcon(Model $ownerRecord, string $pageClass): ?string
|
||||
{
|
||||
return static::$icon;
|
||||
|
||||
Reference in New Issue
Block a user