*/ protected array $actions; /** * @var array */ protected array $flatActions; protected string $evaluationIdentifier = 'group'; protected string $viewIdentifier = 'group'; /** * @param array $actions */ public function __construct(array $actions) { $this->actions($actions); } /** * @param array $actions */ public static function make(array $actions): static { $static = app(static::class, ['actions' => $actions]); $static->configure(); return $static; } protected function setUp(): void { parent::setUp(); $this->iconButton(); } /** * @param array $actions */ public function actions(array $actions): static { $this->actions = []; $this->flatActions = []; foreach ($actions as $action) { if ($action instanceof ActionGroup) { $action->dropdownPlacement('right-top'); $this->flatActions = [ ...$this->flatActions, ...$action->getFlatActions(), ]; } else { $this->flatActions[$action->getName()] = $action; } $this->actions[] = $action; } return $this; } public function button(): static { $this->view(static::BUTTON_VIEW); return $this; } public function isButton(): bool { return $this->getView() === static::BUTTON_VIEW; } public function grouped(): static { $this->view(static::GROUPED_VIEW); return $this; } public function iconButton(): static { $this->view(static::ICON_BUTTON_VIEW); return $this; } public function isIconButton(): bool { return $this->getView() === static::ICON_BUTTON_VIEW; } public function link(): static { $this->view(static::LINK_VIEW); return $this; } public function isLink(): bool { return $this->getView() === static::LINK_VIEW; } public function livewire(Component $livewire): static { foreach ($this->actions as $action) { if (! $action instanceof HasLivewire) { continue; } $action->livewire($livewire); } return $this; } public function getLabel(): string { $label = $this->evaluate($this->label) ?? __('filament-actions::group.trigger.label'); return $this->shouldTranslateLabel ? __($label) : $label; } /** * @return array */ public function getActions(): array { return array_map( fn (StaticAction | ActionGroup $action) => $action->defaultView($action::GROUPED_VIEW), $this->actions, ); } /** * @return array */ public function getFlatActions(): array { return $this->flatActions; } public function getIcon(): string { return $this->getBaseIcon() ?? 'heroicon-m-ellipsis-vertical'; } public function isHidden(): bool { $condition = $this->baseIsHidden(); if ($condition) { return true; } foreach ($this->getActions() as $action) { if ($action->isHidden()) { continue; } return false; } return true; } }