Skip to content

Type Error occurred when creating object: MagentoUiComponentDataSource, Argument 2 passed to MagentoUiComponentDataSource::__construct()

I am facing this error on Magento backed Grid page loading.

Type Error occurred when creating object: MagentoUiComponentDataSource, 
Argument 2 passed to MagentoUiComponentDataSource::__construct() 
must implement interface MagentoFrameworkViewElementUiComponentDataProviderDataProviderInterface, 
instance of CatwalkCustomersPendingReviewsModelResourceModelOrderReviewGridCollectionInterceptor 
given

my code in Catwalk/CustomersPendingReviews/Model/ResourceModel/OrderReview/Grid/Collection.php

<?php

namespace CatwalkCustomersPendingReviewsModelResourceModelOrderReviewGrid;

use MagentoFrameworkViewElementUiComponentDataProviderSearchResult;
use MagentoFrameworkDataCollectionDbFetchStrategyInterface;
use MagentoFrameworkDataCollectionEntityFactoryInterface;
use MagentoFrameworkEventManagerInterface;
use MagentoFrameworkModelResourceModelDbAbstractDb;
use PsrLogLoggerInterface;
use MagentoFrameworkViewElementUiComponentDataProviderDataProviderInterface; 

class Collection extends SearchResult 
{
    /**
     * Initialize collection.
     *
     * @param EntityFactoryInterface $entityFactory
     * @param LoggerInterface $logger
     * @param FetchStrategyInterface $fetchStrategy
     * @param ManagerInterface $eventManager
     * @param string $mainTable
     * @param string $resourceModel
     * @param string $identifierName
     * @param string $connectionName
     */
    public function __construct(
        EntityFactoryInterface $entityFactory,
        LoggerInterface $logger,
        FetchStrategyInterface $fetchStrategy,
        ManagerInterface $eventManager,
        $mainTable = 'sales_order_grid',
        $resourceModel = MagentoSalesModelResourceModelOrder::class,
        $identifierName = 'entity_id',
        $connectionName = null
    ) {
        parent::__construct(
            $entityFactory,
            $logger,
            $fetchStrategy,
            $eventManager,
            $mainTable,
            $resourceModel,
            $identifierName,
            $connectionName
        );
    }
}

and my code in Catwalk/CustomersPendingReviews/view/adminhtml/ui_component/catwalk_order_review_grid.xml

<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">catwalk_order_review_grid.catwalk_order_review_grid_data_source</item>
            <item name="deps" xsi:type="string">catwalk_order_review_grid.catwalk_order_review_grid_data_source</item>
        </item>
        <item name="spinner" xsi:type="string">catwalk_order_review_grid_columns</item>
        <item name="buttons" xsi:type="array">
            <item name="add" xsi:type="array">
                <item name="name" xsi:type="string">add</item>
                <item name="label" xsi:type="string" translate="true">Send Manual Review Request</item>
                <item name="class" xsi:type="string">primary</item>
                <item name="url" xsi:type="string">*/*/sendmanualemail</item>
            </item>
        </item>
    </argument>
    <dataSource name="catwalk_order_review_grid_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">CatwalkCustomersPendingReviewsModelResourceModelOrderReviewGridCollection</argument>
            <argument name="name" xsi:type="string">catwalk_order_review_grid_data_source</argument>
            <argument name="primaryFieldName" xsi:type="string">entity_id</argument>
            <argument name="requestFieldName" xsi:type="string">id</argument>
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="update_url" xsi:type="url" path="mui/index/render"/>
                </item>
            </argument>
        </argument>
    </dataSource>
    <columns name="catwalk_order_review_grid_columns">
        <column name="entity_id">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Order ID</item>
                    <item name="sortOrder" xsi:type="number">10</item>
                </item>
            </argument>
        </column>
        <column name="customer_name">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Customer Name</item>
                    <item name="sortOrder" xsi:type="number">20</item>
                </item>
            </argument>
        </column>
        <column name="customer_email">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">text</item>
                    <item name="label" xsi:type="string" translate="true">Customer Email</item>
                    <item name="sortOrder" xsi:type="number">30</item>
                </item>
            </argument>
        </column>
        <column name="created_at">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">dateRange</item>
                    <item name="label" xsi:type="string" translate="true">Order Date</item>
                    <item name="sortOrder" xsi:type="number">40</item>
                </item>
            </argument>
        </column>
        <column name="status">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">select</item>
                    <item name="label" xsi:type="string" translate="true">Status</item>
                    <item name="sortOrder" xsi:type="number">50</item>
                    <item name="options" xsi:type="array">
                        <item name="pending_review" xsi:type="array">
                            <item name="value" xsi:type="string">pending_review</item>
                            <item name="label" xsi:type="string" translate="true">Pending Review</item>
                        </item>
                        <item name="complete" xsi:type="array">
                            <item name="value" xsi:type="string">complete</item>
                            <item name="label" xsi:type="string" translate="true">Complete</item>
                        </item>
                    </item>
                </item>
            </argument>
        </column>
        <column name="email_status">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="filter" xsi:type="string">select</item>
                    <item name="label" xsi:type="string" translate="true">Email Status</item>
                    <item name="sortOrder" xsi:type="number">60</item>
                    <item name="options" xsi:type="array">
                        <item name="pending" xsi:type="array">
                            <item name="value" xsi:type="string">pending</item>
                            <item name="label" xsi:type="string" translate="true">Pending</item>
                        </item>
                        <item name="sent" xsi:type="array">
                            <item name="value" xsi:type="string">sent</item>
                            <item name="label" xsi:type="string" translate="true">Sent</item>
                        </item>
                        <item name="failed" xsi:type="array">
                            <item name="value" xsi:type="string">failed</item>
                            <item name="label" xsi:type="string" translate="true">Failed</item>
                        </item>
                    </item>
                </item>
            </argument>
        </column>
        <column name="actions" class="CatwalkCustomersPendingReviewsUiComponentListingColumnActions">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="indexField" xsi:type="string">entity_id</item>
                    <item name="sortOrder" xsi:type="number">70</item>
                    <item name="label" xsi:type="string" translate="true">Actions</item>
                </item>
            </argument>
        </column>
    </columns>
</listing>