Skip to content

Commit 9b4c88c

Browse files
committed
Additional work on grids and form arguments
1 parent 3695edd commit 9b4c88c

7 files changed

Lines changed: 78 additions & 5 deletions

File tree

.module.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ EXTENSION_NAME=AdminComponents
33
COMPOSER_NAME=loki/magento2-admin-components
44
PHP_VERSIONS=("8.1","8.2","8.3","8.4")
55
PHPSTAN_LEVEL=1
6+
SKIP_CSS_UTILS=1
7+

Component/Form/FormViewModel.php

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ public function getFields(): array
107107
foreach ($tableColumns as $tableColumn) {
108108
$columnName = $tableColumn['COLUMN_NAME'];
109109
$fieldTypeCode = $this->getFieldTypeCodeFromColumn($tableColumn);
110+
$fieldLabel = $this->getLabelByColumn($tableColumn['COLUMN_NAME']);
111+
$sortOrder = 0;
112+
110113
if (empty($fieldTypeCode)) {
111114
// @todo: echo 'Unknown field type: '.$tableColumn['DATA_TYPE'];
112115
continue;
@@ -117,8 +120,17 @@ public function getFields(): array
117120

118121
if (array_key_exists($columnName, $fieldDefinitions)) {
119122
$fieldDefinition = (array)$fieldDefinitions[$columnName];
123+
120124
if (isset($fieldDefinition['field_type'])) {
121-
$fieldTypeCode = $fieldDefinition['field_type'];
125+
$fieldTypeCode = (string)$fieldDefinition['field_type'];
126+
}
127+
128+
if (isset($fieldDefinition['label'])) {
129+
$fieldLabel = (string)$fieldDefinition['label'];
130+
}
131+
132+
if (isset($fieldDefinition['sortOrder'])) {
133+
$sortOrder = (int)$fieldDefinition['sortOrder'];
122134
}
123135

124136
if (isset($fieldDefinition['html_attributes'])) {
@@ -131,13 +143,18 @@ public function getFields(): array
131143
$fields[] = $this->fieldFactory->create(
132144
$block,
133145
$fieldTypeCode,
134-
$this->getLabelByColumn($tableColumn['COLUMN_NAME']),
146+
$fieldLabel,
135147
$tableColumn['COLUMN_NAME'],
136148
false, // @todo
137-
$htmlAttributes
149+
$htmlAttributes,
150+
$sortOrder
138151
);
139152
}
140153

154+
usort($fields, function (Field $field1, Field $field2) {
155+
return $field1->getSortOrder() <=> $field2->getSortOrder();
156+
});
157+
141158
return $fields;
142159
}
143160

@@ -181,7 +198,8 @@ private function getIndexUri(): string
181198
$currentUri = (string)$this->request->getParam('currentUri');
182199
if (!empty($currentUri)) {
183200
$currentUriParts = explode('_', $currentUri);
184-
return $currentUriParts[0] . '/' . $currentUriParts[1] . '/index';
201+
202+
return $currentUriParts[0].'/'.$currentUriParts[1].'/index';
185203
}
186204

187205
return '*/*/index';

Form/Field/Field.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public function __construct(
1414
private string $code,
1515
private bool $required = false,
1616
private array $htmlAttributes = [],
17+
private int $sortOrder = 0,
1718
private string $scope = 'item'
1819
) {
1920
}
@@ -52,4 +53,9 @@ public function getHtmlAttributes(): array
5253
{
5354
return $this->htmlAttributes;
5455
}
56+
57+
public function getSortOrder(): int
58+
{
59+
return $this->sortOrder;
60+
}
5561
}

Form/Field/FieldFactory.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public function create(
3636
string $label,
3737
string $code,
3838
bool $required = false,
39-
array $htmlAttributes = []
39+
array $htmlAttributes = [],
40+
int $sortOrder = 0
4041
): Field {
4142
$fieldType = $this->fieldTypeProvider->getFieldTypeByCode($fieldTypeCode);
4243

@@ -47,6 +48,7 @@ public function create(
4748
'code' => $code,
4849
'required' => $required,
4950
'htmlAttributes' => $htmlAttributes,
51+
'sortOrder' => $sortOrder,
5052
]);
5153
}
5254
}

Form/Field/FieldType/Textarea.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace Loki\AdminComponents\Form\Field\FieldType;
4+
5+
use Loki\AdminComponents\Form\Field\FieldTypeInterface;
6+
7+
class Textarea implements FieldTypeInterface
8+
{
9+
public function getTemplate(): string
10+
{
11+
return 'Loki_AdminComponents::form/field_type/textarea.phtml';
12+
}
13+
}

etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<argument name="fieldTypes" xsi:type="array">
3030
<item name="view" xsi:type="object">Loki\AdminComponents\Form\Field\FieldType\View</item>
3131
<item name="text" xsi:type="object">Loki\AdminComponents\Form\Field\FieldType\Text</item>
32+
<item name="textarea" xsi:type="object">Loki\AdminComponents\Form\Field\FieldType\Textarea</item>
3233
<item name="date" xsi:type="object">Loki\AdminComponents\Form\Field\FieldType\Date</item>
3334
<item name="datetime" xsi:type="object">Loki\AdminComponents\Form\Field\FieldType\Datetime</item>
3435
<item name="number" xsi:type="object">Loki\AdminComponents\Form\Field\FieldType\Number</item>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
/** @version 0.2.3 */
5+
6+
use Magento\Framework\Escaper;
7+
use Magento\Framework\View\Element\Template;
8+
use Loki\AdminComponents\Form\Field\Field;
9+
use Loki\AdminComponents\Form\Field\FieldType\Textarea;
10+
use Loki\Components\Util\Block\TemplateRenderer;
11+
12+
/** @var Escaper $escaper */
13+
/** @var Template $block */
14+
/** @var Field $field */
15+
/** @var Textarea $fieldType */
16+
/** @var TemplateRenderer $templateRenderer */
17+
18+
$field = $block->getField();
19+
$htmlAttributes = $field->getHtmlAttributes();
20+
$fieldType = $field->getFieldType();
21+
?>
22+
<textarea
23+
class="<?= $css('admin__control-text', '@todo') ?>"
24+
name="<?= $escaper->escapeHtml($field->getCode()) ?>"
25+
data-name="<?= $escaper->escapeHtml($field->getCode()) ?>"
26+
<?php foreach ($htmlAttributes as $htmlAttributeName => $htmlAttributeValue) : ?>
27+
<?= /* @noEscape */ $htmlAttributeName ?>="<?= /* @noEscape */ $htmlAttributeValue ?>"
28+
<?php endforeach; ?>
29+
:value="<?= $escaper->escapeHtml($field->getScope()) ?>.<?= $escaper->escapeHtml($field->getCode()) ?>"
30+
@change="setValue"
31+
></textarea>

0 commit comments

Comments
 (0)