hyva-themes / magento2-hyva-admin

This module aims to make creating grids and forms in the Magento 2 adminhtml area joyful and fast.
https://hyva-themes.github.io/magento2-hyva-admin/
BSD 3-Clause "New" or "Revised" License
168 stars 39 forks source link

Using included columns in the grid definition throws an exception if no data is present #85

Open renttek opened 6 days ago

renttek commented 6 days ago

Using included columns will result in an \OutOfBoundsException being thrown, if the grid source does not return rows/data. I looked into this issue in the scope of this issue: https://github.com/element119/module-admin-opcache-report/issues/1#issuecomment-2431668301

<grid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:module:Hyva_Admin:etc/hyva-grid.xsd">
    <source>
        <arrayProvider>Element119\AdminOpCacheReport\Ui\DataProvider\OpCacheFlushLog</arrayProvider>
    </source>
    <columns>
        <include>
            <column name="log_id"/>
            <column name="admin_name"/>
            <column name="flushed_at"/>
        </include>
    </columns>
    <!-- -->
</grid>

image

The cause of this is, that when Hyva\Admin\Model\GridSource::extractColumnDefinitions() calls the method validateConfiguredKeys, it checks the included columns against all existing ones from the provider. (See: https://github.com/hyva-themes/magento2-hyva-admin/blob/main/Model/GridSource.php#L77)

A simple workaround/hack I've been using (via a composer patch), is to ignore the validation if no data is present:

+        if ($allColumnKeys !== []) {
            $this->validateConfiguredKeys(keys($configuredColumns), $allColumnKeys);
+        }