-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSidePanelControl.php
More file actions
82 lines (68 loc) · 2.06 KB
/
Copy pathSidePanelControl.php
File metadata and controls
82 lines (68 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
declare(strict_types=1);
namespace ADT\FancyAdmin\UI\Components\Controls\SidePanel;
use ADT\DoctrineForms\Form;
use ADT\FancyAdmin\UI\RenderToStringTrait;
use ADT\Forms\BaseForm;
use Exception;
use Nette\Application\UI\Control;
use Nette\Http\Url;
class SidePanelControl extends Control
{
use RenderToStringTrait;
/** @var callable */
private $formFactory;
private SidePanelSize $size = SidePanelSize::Medium;
private string $closeConfirm = 'fcadmin.sidePanels.control.closeConfirm';
public function render(): void
{
$this->template->size = $this->size->value;
$this->template->closeConfirm = $this->closeConfirm;
$this->template->setFile(__DIR__ . '/SidePanelControl.latte');
$this->template->render();
}
public function setFormFactory(callable $formFactory): static
{
$this->formFactory = $formFactory;
return $this;
}
/**
* @throws Exception
*/
protected function createComponentForm(): BaseForm
{
/** @var BaseForm $baseForm */
$baseForm = ($this->formFactory)();
$baseForm->setOnBeforeInitForm(function (Form $form) {
$url = new Url($this->getPresenter()->getHttpRequest()->getUrl());
if ($form->getEntity() && !is_callable($form->getEntity())) {
$url->setQueryParameter('editId', $form->getEntity()->getId());
}
$form->setAction((string) $url);
})
->setOnSuccess(function (Form $form) use ($baseForm) {
$this->getPresenter()->flashMessageSuccess('fcadmin.sidePanels.control.formSaved');
$snippets = $baseForm->getSnippetsToRedraw();
if ($this->getPresenter()->isAjax() && $snippets) {
foreach ($snippets as $snippet) {
$this->getPresenter()->redrawControl($snippet);
}
$this->getPresenter()->redrawControl('sidePanel');
$this->getPresenter()->redrawControl('flashes');
} else {
$this->getPresenter()->redirect('this');
}
});
return $baseForm;
}
public function setSize(SidePanelSize $size): self
{
$this->size = $size;
return $this;
}
public function setCloseConfirm(string $closeConfirm): static
{
$this->closeConfirm = $closeConfirm;
return $this;
}
}