Skip to content

Commit ec3bf68

Browse files
committed
Replace shared dateForm.latte with a control
This has also allowed me to replace `{form $form}` with `{form date}`, similar work done previous commits. This works around efabrica-team/phpstan-latte#388.
1 parent dbfbb38 commit ec3bf68

File tree

8 files changed

+86
-23
lines changed

8 files changed

+86
-23
lines changed

site/app/Admin/Presenters/TrainingsPresenter.php

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
use MichalSpacekCz\Form\DeletePersonalDataFormFactory;
88
use MichalSpacekCz\Form\TrainingApplicationAdminFormFactory;
99
use MichalSpacekCz\Form\TrainingApplicationMultipleFormFactory;
10-
use MichalSpacekCz\Form\TrainingDateFormFactory;
1110
use MichalSpacekCz\Form\TrainingFileFormFactory;
1211
use MichalSpacekCz\Form\TrainingStatusesFormFactory;
1312
use MichalSpacekCz\Training\Applications;
1413
use MichalSpacekCz\Training\DateList\DateListOrder;
1514
use MichalSpacekCz\Training\DateList\TrainingApplicationsList;
1615
use MichalSpacekCz\Training\DateList\TrainingApplicationsListFactory;
1716
use MichalSpacekCz\Training\Dates\TrainingDate;
17+
use MichalSpacekCz\Training\Dates\TrainingDateInputs;
18+
use MichalSpacekCz\Training\Dates\TrainingDateInputsFactory;
1819
use MichalSpacekCz\Training\Dates\TrainingDates;
1920
use MichalSpacekCz\Training\Dates\UpcomingTrainingDates;
2021
use MichalSpacekCz\Training\Exceptions\TrainingApplicationDoesNotExistException;
@@ -70,7 +71,7 @@ public function __construct(
7071
private readonly TrainingApplicationAdminFormFactory $trainingApplicationAdminFactory,
7172
private readonly TrainingApplicationMultipleFormFactory $trainingApplicationMultipleFormFactory,
7273
private readonly TrainingFileFormFactory $trainingFileFormFactory,
73-
private readonly TrainingDateFormFactory $trainingDateFormFactory,
74+
private readonly TrainingDateInputsFactory $trainingDateInputsFactory,
7475
private readonly TrainingStatusesFormFactory $trainingStatusesFormFactory,
7576
private readonly TrainingApplicationsListFactory $trainingApplicationsListFactory,
7677
private readonly TrainingReviewInputsFactory $trainingReviewInputsFactory,
@@ -295,25 +296,15 @@ function (Html|string $message, string $type): never {
295296
}
296297

297298

298-
protected function createComponentEditDate(): Form
299+
protected function createComponentEditTrainingDateInputs(): TrainingDateInputs
299300
{
300-
return $this->trainingDateFormFactory->create(
301-
function (): never {
302-
$this->flashMessage('Termín upraven');
303-
$this->redirect($this->getAction(), $this->redirectParam);
304-
},
305-
$this->training,
306-
);
301+
return $this->trainingDateInputsFactory->createFor($this->training, $this->redirectParam);
307302
}
308303

309304

310-
protected function createComponentAddDate(): Form
305+
protected function createComponentAddTrainingDateInputs(): TrainingDateInputs
311306
{
312-
return $this->trainingDateFormFactory->create(
313-
function (): never {
314-
$this->redirect('Trainings:');
315-
},
316-
);
307+
return $this->trainingDateInputsFactory->create();
317308
}
318309

319310

site/app/Admin/Presenters/templates/Trainings/date.latte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
<hr>
130130
<div id="upravit-termin">
131131
<p><a href="#upravit-termin" class="open-container block separated">Upravit termín</a></p>
132-
{include "common/dateForm.latte", form: editDate, id: upravit-termin-container}
132+
{control editTrainingDateInputs upravit-termin-container}
133133
</div>
134134
<hr>
135135
<div id="ohlasy">

site/app/Admin/Presenters/templates/Trainings/default.latte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div n:foreach="$flashes as $flash" class="flash {$flash->type}"><strong>{$flash->message}</strong></div>
44
<div id="pridat-termin">
55
<p><a href="#pridat-termin" class="open-container block">Přidat termín</a></p>
6-
{include "common/dateForm.latte", form: addDate, id: pridat-termin-container}
6+
{control addTrainingDateInputs pridat-termin-container}
77
</div>
88
<hr>
99
{control trainingApplicationsList}

site/app/Form/TrainingDateFormFactory.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,12 @@ public function __construct(
3535

3636

3737
/**
38-
* @param callable(): void $onSuccess
38+
* @param callable(): void $onSuccessAdd
39+
* @param callable(): void $onSuccessEdit
3940
* @param TrainingDate|null $date
4041
* @return Form
4142
*/
42-
public function create(callable $onSuccess, ?TrainingDate $date = null): Form
43+
public function create(callable $onSuccessAdd, callable $onSuccessEdit, ?TrainingDate $date = null): Form
4344
{
4445
$form = $this->factory->create();
4546

@@ -144,7 +145,7 @@ public function create(callable $onSuccess, ?TrainingDate $date = null): Form
144145
$this->setTrainingDate($form, $date, $submit);
145146
}
146147

147-
$form->onSuccess[] = function (Form $form) use ($onSuccess, $date): void {
148+
$form->onSuccess[] = function (Form $form) use ($onSuccessAdd, $onSuccessEdit, $date): void {
148149
$values = $form->getValues();
149150
if ($date) {
150151
$this->trainingDates->update(
@@ -186,7 +187,7 @@ public function create(callable $onSuccess, ?TrainingDate $date = null): Form
186187
$values->feedbackHref,
187188
);
188189
}
189-
$onSuccess();
190+
$date ? $onSuccessEdit() : $onSuccessAdd();
190191
};
191192

192193
return $form;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace MichalSpacekCz\Training\Dates;
5+
6+
use MichalSpacekCz\Application\UiControl;
7+
use MichalSpacekCz\Form\TrainingDateFormFactory;
8+
use Nette\Forms\Form;
9+
10+
class TrainingDateInputs extends UiControl
11+
{
12+
13+
public function __construct(
14+
private readonly TrainingDateFormFactory $trainingDateFormFactory,
15+
private readonly ?TrainingDate $trainingDate,
16+
private readonly ?int $redirectParam,
17+
) {
18+
}
19+
20+
21+
public function render(string $htmlId): void
22+
{
23+
$this->template->id = $htmlId;
24+
$this->template->render(__DIR__ . '/trainingDateInputs.latte');
25+
}
26+
27+
28+
protected function createComponentDate(): Form
29+
{
30+
return $this->trainingDateFormFactory->create(
31+
function (): never {
32+
$this->redirect('Trainings:');
33+
},
34+
function (): never {
35+
$this->flashMessage('Termín upraven');
36+
$this->getPresenter()->redirect($this->getPresenter()->getAction(), $this->redirectParam);
37+
},
38+
$this->trainingDate,
39+
);
40+
}
41+
42+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace MichalSpacekCz\Training\Dates;
5+
6+
use MichalSpacekCz\Form\TrainingDateFormFactory;
7+
8+
class TrainingDateInputsFactory
9+
{
10+
11+
public function __construct(
12+
private readonly TrainingDateFormFactory $trainingDateFormFactory,
13+
) {
14+
}
15+
16+
17+
public function createFor(TrainingDate $trainingDate, int $redirectParam): TrainingDateInputs
18+
{
19+
return new TrainingDateInputs($this->trainingDateFormFactory, $trainingDate, $redirectParam);
20+
}
21+
22+
23+
public function create(): TrainingDateInputs
24+
{
25+
return new TrainingDateInputs($this->trainingDateFormFactory, null, null);
26+
}
27+
28+
}

site/app/Admin/Presenters/templates/Trainings/common/dateForm.latte renamed to site/app/Training/Dates/trainingDateInputs.latte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{form $form class => aligned}
1+
{form date class => aligned}
22
<div id="{$id}" n:class="!$form->hasErrors() ? hidden">
33
<table>
44
<tr><th>{label training /}</th><td>{input training}</td></tr>

site/config/services.neon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ services:
9999
- MichalSpacekCz\Training\CompanyTrainings
100100
- MichalSpacekCz\Training\DateList\TrainingApplicationsListFactory
101101
- MichalSpacekCz\Training\DateList\UpcomingTrainingDatesListFactory
102+
- MichalSpacekCz\Training\Dates\TrainingDateInputsFactory
102103
- MichalSpacekCz\Training\Dates\TrainingDateStatuses
103104
- MichalSpacekCz\Training\Dates\TrainingDateFactory(texyFormatter: @texyFormatterNoPlaceholders)
104105
- MichalSpacekCz\Training\Dates\TrainingDates

0 commit comments

Comments
 (0)