From 021e6414c8bba3747f19a4bdbee75aad3c3684a3 Mon Sep 17 00:00:00 2001 From: Aleksey Polyvanyi Date: Tue, 15 Nov 2022 10:11:19 +0100 Subject: [PATCH] -allow to append or prepend action -fix method names --- src/Config/Actions.php | 18 +++++++++--------- src/Dto/ActionConfigDto.php | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Config/Actions.php b/src/Config/Actions.php index 971588747e..ce04568dcd 100644 --- a/src/Config/Actions.php +++ b/src/Config/Actions.php @@ -24,21 +24,21 @@ public static function new(): self return new self($dto); } - public function add(string $pageName, Action|string $actionNameOrObject): self + public function add(string $pageName, Action|string $actionNameOrObject, bool $isAppend = false): self { - return $this->doAddAction($pageName, $actionNameOrObject); + return $this->doAddAction($pageName, $actionNameOrObject, false, $isAppend); } - public function addBatchAction(Action|string $actionNameOrObject): self + public function addBatchAction(Action|string $actionNameOrObject, bool $isAppend = false): self { - return $this->doAddAction(Crud::PAGE_INDEX, $actionNameOrObject, true); + return $this->doAddAction(Crud::PAGE_INDEX, $actionNameOrObject, true, $isAppend); } public function set(string $pageName, Action|string $actionNameOrObject): self { $action = \is_string($actionNameOrObject) ? $this->createBuiltInAction($pageName, $actionNameOrObject) : $actionNameOrObject; - $this->dto->appendAction($pageName, $action->getAsDto()); + $this->dto->prependAction($pageName, $action->getAsDto()); return $this; } @@ -219,7 +219,7 @@ private function createBuiltInAction(string $pageName, string $actionName): Acti throw new \InvalidArgumentException(sprintf('The "%s" action is not a built-in action, so you can\'t add or configure it via its name. Either refer to one of the built-in actions or create a custom action called "%s".', $actionName, $actionName)); } - private function doAddAction(string $pageName, Action|string $actionNameOrObject, bool $isBatchAction = false): self + private function doAddAction(string $pageName, Action|string $actionNameOrObject, bool $isBatchAction = false, bool $isAppend = false): self { $actionName = \is_string($actionNameOrObject) ? $actionNameOrObject : (string) $actionNameOrObject; $action = \is_string($actionNameOrObject) ? $this->createBuiltInAction($pageName, $actionNameOrObject) : $actionNameOrObject; @@ -233,10 +233,10 @@ private function doAddAction(string $pageName, Action|string $actionNameOrObject $actionDto->setType(Action::TYPE_BATCH); } - if (Crud::PAGE_INDEX === $pageName && Action::DELETE === $actionName) { - $this->dto->prependAction($pageName, $actionDto); - } else { + if ((Crud::PAGE_INDEX === $pageName && Action::DELETE === $actionName) || $isAppend) { $this->dto->appendAction($pageName, $actionDto); + } else { + $this->dto->prependAction($pageName, $actionDto); } return $this; diff --git a/src/Dto/ActionConfigDto.php b/src/Dto/ActionConfigDto.php index 2732097884..e819a1d162 100644 --- a/src/Dto/ActionConfigDto.php +++ b/src/Dto/ActionConfigDto.php @@ -53,12 +53,12 @@ public function setActionPermissions(array $permissions): void public function prependAction(string $pageName, ActionDto $actionDto): void { - $this->actions[$pageName][$actionDto->getName()] = $actionDto; + $this->actions[$pageName] = array_merge([$actionDto->getName() => $actionDto], $this->actions[$pageName]); } public function appendAction(string $pageName, ActionDto $actionDto): void { - $this->actions[$pageName] = array_merge([$actionDto->getName() => $actionDto], $this->actions[$pageName]); + $this->actions[$pageName] = array_merge($this->actions[$pageName], [$actionDto->getName() => $actionDto]); } public function setAction(string $pageName, ActionDto $actionDto): void