Skip to content

Commit 6145669

Browse files
committed
Implement multiple FieldsResolvers and FieldsetsResolvers
1 parent 99cfded commit 6145669

9 files changed

Lines changed: 187 additions & 10 deletions

File tree

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 Loki\AdminComponents\Form\Field\FieldsResolver;
5+
6+
use Loki\AdminComponents\Component\Form\FormRepository;
7+
use Loki\AdminComponents\Component\Grid\GridRepository;
8+
use Loki\AdminComponents\Provider\FormProviderInterface;
9+
use Loki\Components\Component\ComponentRepository;
10+
11+
class BlockFieldsResolver implements FieldsResolverInterface
12+
{
13+
public function resolve(ComponentRepository $repository, array $fields = []): array
14+
{
15+
if (false === $repository instanceof GridRepository && false === $repository instanceof FormRepository) {
16+
return $fields;
17+
}
18+
19+
$provider = $repository->getProvider();
20+
if ($repository instanceof FormRepository && $provider instanceof FormProviderInterface) {
21+
foreach ($provider->getForm()->getFields() as $fieldIndex => $field) {
22+
$fields[$fieldIndex] = $field;
23+
}
24+
}
25+
26+
return $fields;
27+
}
28+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Loki\AdminComponents\Form\Field\FieldsResolver;
5+
6+
use Loki\AdminComponents\Form\Field\Field;
7+
use Loki\Components\Component\ComponentRepository;
8+
9+
interface FieldsResolverInterface
10+
{
11+
/**
12+
* @param ComponentRepository $repository
13+
* @param Field[] $fields
14+
* @return Field[]
15+
*/
16+
public function resolve(ComponentRepository $repository, array $fields = []): array;
17+
}
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 Loki\AdminComponents\Form\Field\FieldsResolver;
5+
6+
use Loki\AdminComponents\Component\Form\FormRepository;
7+
use Loki\AdminComponents\Component\Grid\GridRepository;
8+
use Loki\AdminComponents\Provider\FormProviderInterface;
9+
use Loki\Components\Component\ComponentRepository;
10+
11+
class ProviderFieldsResolver implements FieldsResolverInterface
12+
{
13+
public function resolve(ComponentRepository $repository, array $fields = []): array
14+
{
15+
if (false === $repository instanceof GridRepository && false === $repository instanceof FormRepository) {
16+
return $fields;
17+
}
18+
19+
$provider = $repository->getProvider();
20+
if ($repository instanceof FormRepository && $provider instanceof FormProviderInterface) {
21+
foreach ($provider->getForm()->getFields() as $fieldIndex => $field) {
22+
$fields[$fieldIndex] = $field;
23+
}
24+
}
25+
26+
return $fields;
27+
}
28+
}

Form/Fieldset/FieldsetsResolver.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44
namespace Loki\AdminComponents\Form\Fieldset;
55

66
use Loki\AdminComponents\Component\Form\FormRepository;
7-
use Loki\AdminComponents\Exception\NoProviderException;
87
use Loki\AdminComponents\Form\Field\FieldFactory;
98
use Loki\AdminComponents\Form\Field\FieldsResolver;
10-
use Loki\AdminComponents\Provider\FormProviderInterface;
9+
use Loki\AdminComponents\Form\Fieldset\FieldsetsResolver\FieldsetsResolverInterface;
1110
use Magento\Framework\View\Element\AbstractBlock;
1211

1312
class FieldsetsResolver
1413
{
1514
public function __construct(
1615
private FieldsetFactory $fieldsetFactory,
1716
private FieldsResolver $fieldsResolver,
18-
private FieldFactory $fieldFactory
17+
private FieldFactory $fieldFactory,
18+
/** @var FieldsetsResolverInterface[] */ private array $fieldsetsResolvers = []
1919
) {
2020
}
2121

@@ -26,12 +26,9 @@ public function resolve(
2626
FormRepository $formRepository,
2727
AbstractBlock $block,
2828
): array {
29-
try {
30-
$provider = $formRepository->getProvider();
31-
if ($provider instanceof FormProviderInterface) {
32-
return $provider->getForm()->getFieldsets();
33-
}
34-
} catch (NoProviderException $e) {
29+
$fieldsets = [];
30+
foreach ($this->fieldsetsResolvers as $fieldsetsResolver) {
31+
$fieldsets = $fieldsetsResolver->resolve($formRepository, $fieldsets);
3532
}
3633

3734
$fieldsetDefinitions = (array)$block->getFieldsets();
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 Loki\AdminComponents\Form\Fieldset\FieldsetsResolver;
5+
6+
use Loki\AdminComponents\Component\Form\FormRepository;
7+
use Loki\AdminComponents\Component\Grid\GridRepository;
8+
use Loki\AdminComponents\Provider\FormProviderInterface;
9+
use Loki\Components\Component\ComponentRepository;
10+
11+
class BlockFieldsetsResolver implements FieldsetsResolverInterface
12+
{
13+
public function resolve(ComponentRepository $repository, array $fieldsets = []): array
14+
{
15+
if (false === $repository instanceof GridRepository && false === $repository instanceof FormRepository) {
16+
return $fieldsets;
17+
}
18+
19+
$provider = $repository->getProvider();
20+
if ($repository instanceof FormRepository && $provider instanceof FormProviderInterface) {
21+
foreach ($provider->getForm()->getFieldsets() as $fieldsetIndex => $fieldset) {
22+
$fieldsets[$fieldsetIndex] = $fieldset;
23+
}
24+
}
25+
26+
return $fieldsets;
27+
}
28+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Loki\AdminComponents\Form\Fieldset\FieldsetsResolver;
5+
6+
use Loki\Components\Component\ComponentRepository;
7+
use Loki\AdminComponents\Form\Fieldset\Fieldset;
8+
9+
interface FieldsetsResolverInterface
10+
{
11+
/**
12+
* @param ComponentRepository $repository
13+
* @param Fieldset[] $fieldsets
14+
* @return Fieldset[]
15+
*/
16+
public function resolve(ComponentRepository $repository, array $fieldsets = []): array;
17+
}
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 Loki\AdminComponents\Form\Fieldset\FieldsetsResolver;
5+
6+
use Loki\AdminComponents\Component\Form\FormRepository;
7+
use Loki\AdminComponents\Component\Grid\GridRepository;
8+
use Loki\AdminComponents\Provider\FormProviderInterface;
9+
use Loki\Components\Component\ComponentRepository;
10+
11+
class ProviderFieldsetsResolver implements FieldsetsResolverInterface
12+
{
13+
public function resolve(ComponentRepository $repository, array $fieldsets = []): array
14+
{
15+
if (false === $repository instanceof GridRepository && false === $repository instanceof FormRepository) {
16+
return $fieldsets;
17+
}
18+
19+
$provider = $repository->getProvider();
20+
if ($repository instanceof FormRepository && $provider instanceof FormProviderInterface) {
21+
foreach ($provider->getForm()->getFieldsets() as $fieldsetIndex => $fieldset) {
22+
$fieldsets[$fieldsetIndex] = $fieldset;
23+
}
24+
}
25+
26+
return $fieldsets;
27+
}
28+
}

Form/Form.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public function __construct(
2424
*/
2525
private array $fieldsets = [];
2626

27+
/**
28+
* @var Field[]
29+
*/
30+
private array $fields = [];
31+
2732
/**
2833
* @var Button[]
2934
*/
@@ -40,6 +45,17 @@ public function getFieldsets(): array
4045
return $this->fieldsets;
4146
}
4247

48+
public function addField(Field $field): Form
49+
{
50+
$this->fields[] = $field;
51+
return $this;
52+
}
53+
54+
public function getFields(): array
55+
{
56+
return $this->fields;
57+
}
58+
4359
public function addButton(Button $button): Form
4460
{
4561
$this->buttons[] = $button;

etc/adminhtml/di.xml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,25 @@
7676
</arguments>
7777
</type>
7878

79-
<type name="\Loki\AdminComponents\Ui\Button\ButtonsResolver">
79+
<type name="Loki\AdminComponents\Form\Fieldset\FieldsetsResolver">
80+
<arguments>
81+
<argument name="fieldsetsResolvers" xsi:type="array">
82+
<item name="provider" xsi:type="object">Loki\AdminComponents\Form\Fieldset\FieldsetsResolver\ProviderFieldsetsResolver</item>
83+
<item name="block" xsi:type="object">Loki\AdminComponents\Form\Fieldset\FieldsetsResolver\ProviderFieldsetsResolver</item>
84+
</argument>
85+
</arguments>
86+
</type>
87+
88+
<type name="Loki\AdminComponents\Form\Field\FieldsResolver">
89+
<arguments>
90+
<argument name="fieldsResolvers" xsi:type="array">
91+
<item name="provider" xsi:type="object">Loki\AdminComponents\Form\Field\FieldsResolver\ProviderFieldsResolver</item>
92+
<item name="block" xsi:type="object">Loki\AdminComponents\Form\Field\FieldsResolver\BlockFieldsResolver</item>
93+
</argument>
94+
</arguments>
95+
</type>
96+
97+
<type name="Loki\AdminComponents\Ui\Button\ButtonsResolver">
8098
<arguments>
8199
<argument name="buttonsResolvers" xsi:type="array">
82100
<item name="provider" xsi:type="object">Loki\AdminComponents\Ui\Button\ButtonsResolver\ProviderButtonsResolver</item>

0 commit comments

Comments
 (0)