Skip to content

Commit 5f1de92

Browse files
committed
Better handling of inline edit actions
1 parent cbda6e3 commit 5f1de92

7 files changed

Lines changed: 52 additions & 11 deletions

File tree

Component/Grid/GridViewModel.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ public function getJsData(): array
142142
return [
143143
...parent::getJsData(),
144144
...$this->getState()->toArray(),
145+
'namespace' => $this->getNamespace(),
145146
'gridFilters' => $this->getGridFilterValues(),
146147
'columnPositions' => $this->getColumnPositions(),
147148
'newUrl' => $this->getNewUrl(),
@@ -313,6 +314,10 @@ public function getGridFilterValues(): array
313314
$gridFilterValues = [];
314315
foreach ($this->getGridFilters() as $gridFilter) {
315316
$value = $this->getState()->getFilterValue($gridFilter->getCode());
317+
if (empty($value)) {
318+
continue;
319+
}
320+
316321
$gridFilterValues[$gridFilter->getCode()] = $value;
317322
}
318323

Grid/Action/InlineEditAction.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public function execute(GridRepository $gridRepository, array $value): void
2121

2222
$item = $providerHandler->getItem($provider, $identifier);
2323
$item->setData($propertyName, $propertyValue);
24+
2425
$providerHandler->saveItem($provider, $item);
2526
}
2627
}

Grid/State.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,17 @@ public function getFilterValue(string $name): mixed
148148
public function setFilter(string $name, mixed $value): void
149149
{
150150
$filters = $this->getFilters();
151-
$filters[$name] = $value;
151+
if (empty($value) && isset($filters[$name])) {
152+
unset($filters[$name]);
153+
} else {
154+
$filters[$name] = $value;
155+
}
156+
152157
$this->setFilters($filters);
153158
}
154159

155160
/**
156-
* @param Filter[] $filters
161+
* @param mixed[] $filters
157162
*
158163
* @return void
159164
*/

ProviderHandler/ArrayHandler.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,17 @@ public function match(object $provider): bool
2525

2626
public function getItem(object $provider, int|string $identifier): DataObject
2727
{
28+
/** @var ArrayProviderInterface $provider */
29+
$rows = $provider->getData();
30+
$primaryKey = $this->getPrimaryKey($provider);
31+
if (!empty($primaryKey)) {
32+
foreach ($rows as $row) {
33+
if (isset($row[$primaryKey]) && $row[$primaryKey] == $identifier) {
34+
return $this->dataObjectFactory->create()->setData($row);
35+
}
36+
}
37+
}
38+
2839
throw new RuntimeException('Unable to retrieve item from array');
2940
}
3041

@@ -93,6 +104,9 @@ public function getItems(object $provider, GridState $gridState): array
93104

94105
public function saveItem(object $provider, DataObject $item)
95106
{
107+
if (method_exists($provider, 'saveItem')) {
108+
call_user_func([$provider, 'saveItem'], $item);
109+
}
96110
}
97111

98112
public function deleteItem(object $provider, DataObject $item)
@@ -121,4 +135,13 @@ public function getResourceModelClass(object $provider): bool|string
121135
{
122136
return false;
123137
}
138+
139+
public function getPrimaryKey(object $provider): ?string
140+
{
141+
if (method_exists($provider, 'getPrimaryKey')) {
142+
return call_user_func([$provider, 'getPrimaryKey']);
143+
}
144+
145+
return null;
146+
}
124147
}

view/adminhtml/templates/grid/cell/default.phtml

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

4-
/** @version 0.3.2 */
5-
64
use Magento\Framework\Escaper;
75
use Magento\Framework\View\Element\Template;
86

7+
/** @version 0.3.2 */
98
/** @var Escaper $escaper */
109
/** @var Template $block */
1110
$value = $block->getValue();
11+
$emptyValue = $block->getEmptyValue();
12+
13+
if (empty($value) && !empty($emptyValue)) {
14+
$value = $emptyValue;
15+
}
1216

1317
if (is_array($value)) {
1418
$value = 'array';
1519
}
1620

17-
1821
if (is_object($value)) {
1922
$value = 'object';
2023
}

view/adminhtml/templates/grid/cell/inline_edit.phtml

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

4-
/** @version 0.3.2 */
5-
64
use Magento\Framework\View\Element\Template;
75
use Magento\Framework\Escaper;
86
use Magento\Framework\DataObject;
97
use Loki\Components\Factory\ViewModelFactory;
108

9+
/** @version 0.3.2 */
1110
/** @var Template $block */
1211
/** @var Escaper $escaper */
1312
/** @var Magento\Framework\View\Element\Template $block */
@@ -16,7 +15,7 @@ use Loki\Components\Factory\ViewModelFactory;
1615

1716
$item = $block->getItem();
1817
?>
19-
<div x-data="LokiAdminInlineEditComponent">
18+
<div x-data="LokiAdminInlineEditComponent" @dblclick="toggleInlineEdit">
2019
<span @dblclick="toggleInlineEdit" x-show="hideInlineEdit">
2120
<?= $escaper->escapeHtml($block->getValue()) ?>
2221
</span>
@@ -30,15 +29,19 @@ $item = $block->getItem();
3029
/>
3130

3231
<button
33-
class="action-close"
32+
class="action-close2"
3433
@click.prevent="toggleInlineEdit"
35-
></button>
34+
>
35+
<?= $escaper->escapeHtml(__('Close')) ?>
36+
</button>
3637

3738
<button
3839
class="action-save"
3940
@click.prevent="saveInlineEdit"
4041
data-identifier="<?= $escaper->escapeHtml($item->getId()) ?>"
4142
data-property="<?= $escaper->escapeHtml($block->getColumnName()) ?>"
42-
>save</button>
43+
>
44+
<?= $escaper->escapeHtml(__('Save')) ?>
45+
</button>
4346
</span>
4447
</div>

view/adminhtml/templates/grid/table.phtml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ $state = $viewModel->getState();
118118
[
119119
'item' => $item,
120120
'value' => $value,
121+
'empty_value' => $column->getEmptyValue(),
121122
'column_name' => $column->getCode(),
122123
]
123124
) ?>

0 commit comments

Comments
 (0)