Skip to content

Commit 6e53b14

Browse files
committed
Properlys set code for layout-only field
1 parent a6bb407 commit 6e53b14

3 files changed

Lines changed: 79 additions & 42 deletions

File tree

Component/Form/FormViewModel.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,12 @@ public function getFieldsets(): array
131131
$fieldsets['base']->addField($field);
132132
}
133133

134-
foreach ($fieldDefinitions as $fieldDefinition) {
135-
$block = $this->getBlock();
136-
$field = $this->fieldFactory->create($block, $fieldDefinition);
134+
foreach ($fieldDefinitions as $fieldDefinitionName => $fieldDefinition) {
135+
if (!isset($fieldDefinition['code'])) {
136+
$fieldDefinition['code'] = $fieldDefinitionName;
137+
}
138+
139+
$field = $this->fieldFactory->create($this->getBlock(), $fieldDefinition);
137140

138141
if (!empty($fieldsetCode) && array_key_exists($fieldsetCode, $fieldsets)) {
139142
$fieldsets[$fieldsetCode]->addField($field);

ViewModel/Form/Field/EntitySelect.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,74 @@
22

33
namespace Loki\AdminComponents\ViewModel\Form\Field;
44

5+
use Loki\AdminComponents\Component\Grid\GridRepository;
6+
use Loki\AdminComponents\Component\Grid\GridViewModel;
7+
use Loki\AdminComponents\Form\Field\Field;
8+
use Loki\Components\Component\Component;
9+
use Loki\Components\Component\ComponentContext;
10+
use Magento\Customer\Model\ResourceModel\Customer;
11+
use Magento\Customer\Model\ResourceModel\Customer\Collection;
12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Framework\View\Element\AbstractBlock;
514
use Magento\Framework\View\Element\Block\ArgumentInterface;
15+
use Magento\Framework\View\Element\Template;
616

717
class EntitySelect implements ArgumentInterface
818
{
19+
public function __construct(
20+
private AbstractBlock $block
21+
) {
22+
}
923

24+
public function getField(): Field
25+
{
26+
return $this->block->getField();
27+
}
28+
29+
public function getButtonLabel(): string
30+
{
31+
$buttonLabel = $this->getField()->getButtonLabel();
32+
if (!empty($buttonLabel)) {
33+
return $buttonLabel;
34+
}
35+
36+
return 'Select entity';
37+
}
38+
39+
public function getColumns(): array
40+
{
41+
return $this->getGridViewModel()->getColumns();
42+
}
43+
44+
public function getCurrentItem()
45+
{
46+
$currentId = 1;
47+
$currentItem = $this->getGridViewModel()->getCurrentItem($currentId);
48+
return $currentItem;
49+
}
50+
51+
private function getGridViewModel(): GridViewModel
52+
{
53+
$block = $this->block->getLayout()->createBlock(Template::class);
54+
55+
/** @var Component $component */
56+
$namespace = $this->getField()->getNamespace();
57+
if ($namespace) {
58+
$block->setNamespace($namespace);
59+
}
60+
61+
$block->setResourceModel(Customer::class);
62+
$block->setProvider(ObjectManager::getInstance()->get(Collection::class));
63+
64+
$component = ObjectManager::getInstance()->create(Component::class, [
65+
'name' => $block->getNameInLayout(),
66+
'viewModelClass' => GridViewModel::class,
67+
'repositoryClass' => GridRepository::class,
68+
'context' => ObjectManager::getInstance()->create(ComponentContext::class),
69+
]);
70+
71+
/** @var GridViewModel $gridViewModel */
72+
$gridViewModel = $component->getViewModel();
73+
return $gridViewModel;
74+
}
1075
}

view/adminhtml/templates/form/field_type/entity_select.phtml

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
11
<?php
22
declare(strict_types=1);
33

4-
use Loki\AdminComponents\Component\Grid\GridRepository;
5-
use Loki\AdminComponents\Component\Grid\GridViewModel;
64
use Loki\AdminComponents\Form\Field\Field;
75
use Loki\AdminComponents\Form\Field\FieldType\Input;
86
use Loki\AdminComponents\ViewModel\Form\Field\EntitySelect;
9-
use Loki\Components\Component\Component;
10-
use Loki\Components\Component\ComponentContext;
117
use Loki\Components\Factory\ViewModelFactory;
128
use Loki\Components\Util\Block\TemplateRenderer;
13-
use Magento\Customer\Model\ResourceModel\Customer;
14-
use Magento\Customer\Model\ResourceModel\Customer\Collection;
15-
use Magento\Framework\App\ObjectManager;
169
use Magento\Framework\Escaper;
1710
use Magento\Framework\View\Element\Template;
1811

@@ -25,50 +18,26 @@ use Magento\Framework\View\Element\Template;
2518
/** @var ViewModelFactory $viewModelFactory */
2619
/** @var EntitySelect $entitySelect */
2720

28-
$entitySelect = $viewModelFactory->create(EntitySelect::class);
21+
$entitySelect = $viewModelFactory->create(EntitySelect::class, [
22+
'block' => $block
23+
]);
2924

30-
$field = $block->getField();
25+
$field = $entitySelect->getField();
3126
$fieldAttributes = $field->getFieldAttributes();
3227
$fieldType = $field->getFieldType();
3328
$inputType = $fieldType->getInputType();
29+
$buttonLabel = $entitySelect->getButtonLabel();
3430

3531
if (isset($fieldAttributes['type'])) {
3632
$inputType = $fieldAttributes['type'];
3733
unset($fieldAttributes['type']);
3834
}
3935

40-
$buttonLabel = $field->getButtonLabel();
41-
if (empty($buttonLabel)) {
42-
$buttonLabel = 'Select entity';
43-
}
44-
45-
/** @var Component $component */
46-
$namespace = $field->getNamespace();
47-
if ($namespace) {
48-
$block->setNamespace($namespace);
49-
}
50-
51-
52-
53-
$block->setResourceModel(Customer::class);
54-
$block->setProvider(ObjectManager::getInstance()->get(Collection::class));
55-
56-
$component = ObjectManager::getInstance()->create(Component::class, [
57-
'name' => $block->getNameInLayout(),
58-
'viewModelClass' => GridViewModel::class,
59-
'repositoryClass' => GridRepository::class,
60-
'context' => ObjectManager::getInstance()->create(ComponentContext::class),
61-
]);
62-
63-
/** @var GridViewModel $gridViewModel */
64-
$gridViewModel = $component->getViewModel();
65-
$columns = $gridViewModel->getColumns();
66-
67-
$currentId = 1;
68-
$currentItem = $gridViewModel->getCurrentItem($currentId);
36+
$columns = $entitySelect->getColumns();
37+
$currentItem = $entitySelect->getCurrentItem();
38+
$valueCode = $field->getScope() . '.' . $field->getCode();
6939

7040
// @todo: Modal effect with _show does not animate
71-
$valueCode = $field->getScope() . '.' . $field->getCode();
7241
?>
7342
<div
7443
x-data="LokiAdminFormEntitySelectComponent"

0 commit comments

Comments
 (0)