I've a backend grid that uses the UI component and itself works and shows up fine, but I can't get inline edit working. I've tried following a couple of tutorials and examples and I can't figure out what I'm missing here. Nothing happens when I click the supposedly editable column.
Here are some relevant snippets from my code:
UI component xml-file:
<columns name="spinner_columns">
<selectionsColumn name="ids">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="editorConfig" xsi:type="array">
<item name="selectProvider" xsi:type="string">vendor_module_threshold_listing.vendor_module_threshold_listing.spinner_columns.ids</item>
<item name="enabled" xsi:type="boolean">true</item>
<item name="indexField" xsi:type="string">threshold_id</item>
<item name="clientConfig" xsi:type="array">
<item name="saveUrl" xsi:type="url" path="vendor_module/threshold/inlineEdit"/>
<item name="validateBeforeSave" xsi:type="boolean">false</item>
</item>
</item>
<item name="childDefaults" xsi:type="array">
<item name="fieldAction" xsi:type="array">
<item name="provider" xsi:type="string">vendor_module_threshold_listing.vendor_module_threshold_listing.spinner_columns_editor</item>
<item name="target" xsi:type="string">startEdit</item>
<item name="params" xsi:type="array">
<item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
<item name="1" xsi:type="boolean">true</item>
</item>
</item>
</item>
</item>
</argument>
</selectionsColumn>
...
<column name="threshold">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="editor" xsi:type="array">
<item name="editorType" xsi:type="string">text</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">true</item>
</item>
</item>
<item name="filter" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Threshold</item>
</item>
</argument>
</column>
Vendor/Module/Controller/Adminhtml/Threshold/InlineEdit.php
<?php
namespace Vendor\Module\Controller\Adminhtml\Threshold;
class InlineEdit extends \Magento\Backend\App\Action
{
protected $jsonFactory;
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Framework\Controller\Result\JsonFactory $jsonFactory
) {
parent::__construct($context);
$this->jsonFactory = $jsonFactory;
}
public function execute()
{
/** @var \Magento\Framework\Controller\Result\Json $resultJson */
$resultJson = $this->jsonFactory->create();
$error = false;
$messages = [];
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/test.log');
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info('inlineEdit triggered!');
if ($this->getRequest()->getParam('isAjax')) {
$postItems = $this->getRequest()->getParam('items', []);
if (!count($postItems)) {
$messages[] = __('Please correct the data sent.');
$error = true;
} else {
foreach (array_keys($postItems) as $entityId) {
/** load your model to update the data */
$model = $this->_objectManager->create('Vendor\Module\Model')->load($entityId);
try {
$model->setData(array_merge($model->getData(), $postItems[$entityId]));
$model->save();
} catch (\Exception $e) {
$messages[] = "[Error:] {$e->getMessage()}";
$error = true;
}
}
}
}
return $resultJson->setData([
'messages' => $messages,
'error' => $error
]);
}
}
InlineEdit.php is never triggered by the way.
Any ideas what's wrong/how to fix this? Help would be much appreciated.
Best Answer
Please update your xml file like below.
All in all you need to keep these configurations outside of selectionColumn node. let me know if any further help needed.