From 8c1b66fec4f1b554afee4a1d9cdbe399fbe9bf59 Mon Sep 17 00:00:00 2001 From: nidjo Date: Fri, 30 Dec 2022 14:09:06 +0100 Subject: [PATCH 1/4] group actions confirm dialog --- src/Datagrid.php | 13 +++++++++++++ src/GroupAction/GroupActionCollection.php | 9 ++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Datagrid.php b/src/Datagrid.php index ad0f48ca..52834973 100644 --- a/src/Datagrid.php +++ b/src/Datagrid.php @@ -274,6 +274,8 @@ class Datagrid extends Control protected bool $showSelectedRowsCount = true; + protected ?string $groupActionsConfirmDialog; + private ?string $customPaginatorTemplate = null; private ?string $componentFullName = null; @@ -2879,6 +2881,17 @@ public function setCustomPaginatorTemplate(string $templateFile): void $this->customPaginatorTemplate = $templateFile; } + + public function setGroupActionsConfirmDialog(string $confirmDialog): void + { + $this->groupActionsConfirmDialog = $confirmDialog; + } + + public function getGroupActionsConfirmDialog(): ?string + { + return $this->groupActionsConfirmDialog; + } + protected function createSorting(array $sort, ?callable $sortCallback = null): Sorting { foreach ($sort as $key => $order) { diff --git a/src/GroupAction/GroupActionCollection.php b/src/GroupAction/GroupActionCollection.php index 08b5c48c..e4740d9a 100644 --- a/src/GroupAction/GroupActionCollection.php +++ b/src/GroupAction/GroupActionCollection.php @@ -9,6 +9,7 @@ use Nette\Forms\Controls\SelectBox; use Nette\Forms\Controls\SubmitButton; use Nette\Forms\Form as NetteForm; +use Ublaboo\DataGrid\Column\Action; use UnexpectedValueException; class GroupActionCollection @@ -129,12 +130,18 @@ public function addToFormContainer(Container $container): void strtolower($this->datagrid->getFullName()) . 'group_action_submit' ); - $container->addSubmit('submit', 'contributte_datagrid.execute') + $submit = $container->addSubmit('submit', 'contributte_datagrid.execute') ->setValidationScope([$container]) ->setHtmlAttribute( 'id', strtolower($this->datagrid->getFullName()) . 'group_action_submit' ); + + $confirmationDialog = $this->datagrid->getGroupActionsConfirmDialog(); + if ($confirmationDialog !== null && $confirmationDialog !== '') { + $submit->setHtmlAttribute('data-' . Action::$dataConfirmAttributeName, $confirmationDialog); + $submit->setHtmlAttribute('data-group-action', 'true'); + } } else { unset($container['group_action']); } From 2ccf4fa0e4024609d2bc8d0010bf6126da4ab169 Mon Sep 17 00:00:00 2001 From: nidjo Date: Mon, 2 Jan 2023 15:20:30 +0100 Subject: [PATCH 2/4] move dialog setter in GroupActionCollection class --- src/Datagrid.php | 10 ---------- src/GroupAction/GroupActionCollection.php | 13 ++++++++++--- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Datagrid.php b/src/Datagrid.php index 52834973..2d0bbe39 100644 --- a/src/Datagrid.php +++ b/src/Datagrid.php @@ -2882,16 +2882,6 @@ public function setCustomPaginatorTemplate(string $templateFile): void } - public function setGroupActionsConfirmDialog(string $confirmDialog): void - { - $this->groupActionsConfirmDialog = $confirmDialog; - } - - public function getGroupActionsConfirmDialog(): ?string - { - return $this->groupActionsConfirmDialog; - } - protected function createSorting(array $sort, ?callable $sortCallback = null): Sorting { foreach ($sort as $key => $order) { diff --git a/src/GroupAction/GroupActionCollection.php b/src/GroupAction/GroupActionCollection.php index e4740d9a..582a39b1 100644 --- a/src/GroupAction/GroupActionCollection.php +++ b/src/GroupAction/GroupActionCollection.php @@ -20,6 +20,9 @@ class GroupActionCollection /** @var array */ protected array $groupActions = []; + protected ?string $groupActionsConfirmDialog = null; + + public function __construct(protected Datagrid $datagrid) { } @@ -137,9 +140,8 @@ public function addToFormContainer(Container $container): void strtolower($this->datagrid->getFullName()) . 'group_action_submit' ); - $confirmationDialog = $this->datagrid->getGroupActionsConfirmDialog(); - if ($confirmationDialog !== null && $confirmationDialog !== '') { - $submit->setHtmlAttribute('data-' . Action::$dataConfirmAttributeName, $confirmationDialog); + if ($this->groupActionsConfirmDialog !== null) { + $submit->setHtmlAttribute('data-' . Action::$dataConfirmAttributeName, $this->groupActionsConfirmDialog); $submit->setHtmlAttribute('data-group-action', 'true'); } } else { @@ -265,6 +267,11 @@ public function getGroupAction(string $title): GroupAction throw new DatagridGroupActionException(sprintf('Group action %s does not exist.', $title)); } + public function setGroupActionsConfirmDialog(string $confirmDialog): void + { + $this->groupActionsConfirmDialog = $confirmDialog; + } + private function getFormSubmitter(NetteForm $form): ?SubmitButton { $container = $form['group_action']; From 193d185737014ce164f0926e4be40f20bece5ece Mon Sep 17 00:00:00 2001 From: nidjo Date: Fri, 27 Jan 2023 20:56:40 +0100 Subject: [PATCH 3/4] fix coding standards --- src/Datagrid.php | 3 --- src/GroupAction/GroupActionCollection.php | 1 - 2 files changed, 4 deletions(-) diff --git a/src/Datagrid.php b/src/Datagrid.php index 2d0bbe39..ad0f48ca 100644 --- a/src/Datagrid.php +++ b/src/Datagrid.php @@ -274,8 +274,6 @@ class Datagrid extends Control protected bool $showSelectedRowsCount = true; - protected ?string $groupActionsConfirmDialog; - private ?string $customPaginatorTemplate = null; private ?string $componentFullName = null; @@ -2881,7 +2879,6 @@ public function setCustomPaginatorTemplate(string $templateFile): void $this->customPaginatorTemplate = $templateFile; } - protected function createSorting(array $sort, ?callable $sortCallback = null): Sorting { foreach ($sort as $key => $order) { diff --git a/src/GroupAction/GroupActionCollection.php b/src/GroupAction/GroupActionCollection.php index 582a39b1..7d441d67 100644 --- a/src/GroupAction/GroupActionCollection.php +++ b/src/GroupAction/GroupActionCollection.php @@ -22,7 +22,6 @@ class GroupActionCollection protected ?string $groupActionsConfirmDialog = null; - public function __construct(protected Datagrid $datagrid) { } From 1c36c3a3f8a677525c7ccd2e6e70076358f056be Mon Sep 17 00:00:00 2001 From: nidjo Date: Wed, 20 Sep 2023 14:47:08 +0200 Subject: [PATCH 4/4] check groupAction data attribute in event handler --- assets/plugins/features/confirm.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/assets/plugins/features/confirm.ts b/assets/plugins/features/confirm.ts index 21302b17..f9bf4623 100644 --- a/assets/plugins/features/confirm.ts +++ b/assets/plugins/features/confirm.ts @@ -20,6 +20,10 @@ export class ConfirmPlugin implements DatagridPlugin { const message = el.getAttribute(ConfirmAttribute)!; if (!message) return; + if (el.getAttribute('data-group-action') === null) { + return; + } + if (!this.confirm(message)) { e.stopPropagation(); e.preventDefault();