Skip to content

Commit d40b4ed

Browse files
committed
Allow for item convertors in forms
1 parent 0336ad4 commit d40b4ed

3 files changed

Lines changed: 27 additions & 3 deletions

File tree

Component/Form/FormViewModel.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Loki\AdminComponents\Component\Form;
44

5+
use Loki\AdminComponents\Form\ItemConvertorInterface;
56
use Magento\Framework\App\RequestInterface;
67
use Magento\Framework\DataObject;
78
use Magento\Framework\ObjectManagerInterface;
@@ -23,7 +24,8 @@ public function __construct(
2324
protected ButtonFactory $buttonFactory,
2425
protected ObjectManagerInterface $objectManager,
2526
protected FieldFactory $fieldFactory,
26-
protected RequestInterface $request
27+
protected RequestInterface $request,
28+
protected array $itemFilters = [],
2729
) {
2830
}
2931

@@ -36,11 +38,26 @@ public function getJsData(): array
3638
{
3739
return [
3840
...parent::getJsData(),
39-
'item' => $this->getRepository()->getItem()?->toArray(),
41+
'item' => $this->getItemData(),
4042
'indexUrl' => $this->getIndexUrl(),
4143
];
4244
}
4345

46+
private function getItemData(): array
47+
{
48+
$item = $this->getRepository()->getItem();
49+
if (false === $item instanceof DataObject) {
50+
return [];
51+
}
52+
53+
$itemConvertor = $this->getBlock()->getItemConvertor();
54+
if ($itemConvertor instanceof ItemConvertorInterface) {
55+
$item = $itemConvertor->afterLoad($item);
56+
}
57+
58+
return $item->toArray();
59+
}
60+
4461
public function getIndexUrl(): string
4562
{
4663
return $this->urlFactory->create()->getUrl($this->getIndexUri());
@@ -107,6 +124,8 @@ public function getFields(): array
107124
if (isset($fieldDefinition['html_attributes'])) {
108125
$htmlAttributes = array_merge($htmlAttributes, $fieldDefinition['html_attributes']);
109126
}
127+
128+
$block->addData($fieldDefinition);
110129
}
111130

112131
$fields[] = $this->fieldFactory->create(

Form/Action/SaveAction.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Loki\AdminComponents\Form\Action;
44

5+
use Loki\AdminComponents\Form\ItemConvertorInterface;
56
use Magento\Framework\DataObject;
67
use Magento\Framework\Message\Manager;
78
use Loki\AdminComponents\Component\Form\FormRepository;
@@ -36,6 +37,11 @@ public function execute(FormRepository $formRepository, array $value): void
3637
$this->setItemPropertyValue($item, $propertyKey, $propertyValue);
3738
}
3839

40+
$itemConvertor = $formRepository->getComponent()->getViewModel()->getBlock()->getItemConvertor();
41+
if ($itemConvertor instanceof ItemConvertorInterface) {
42+
$item = $itemConvertor->beforeSave($item);
43+
}
44+
3945
$providerHandler->saveItem($provider, $item);
4046
$this->messageManager->addSuccessMessage('Item saved');
4147
}

view/adminhtml/templates/form/field.phtml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ if (false === $field instanceof Field) {
1717
$fieldViewModel = $viewModelFactory->create(FieldViewModel::class);
1818
$field = $fieldViewModel->getField($block);
1919
}
20-
2120
?>
2221
<div class="admin__field">
2322
<div class="admin__field-label">

0 commit comments

Comments
 (0)