Magento 2 UI Grid Filter Collection

In Magento 2 UI grid, sometimes  when data-provider is passed in the XML file and we have to add the filter of store switcher, it doesn’t works,because when Magento call the collection of grid via ajax it use another controller(default -> mui/index/render) and it won’t have the parameter same as the previous URL, so to pass these parameters to new URL we can follow the below mentioned steps.

First add custom key, a filter_url_params section in the data-provider UI grid, as shown:

 

   <dataSource name="driver_listing_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">MageNative\MobiDelivery\Ui\DataProvider\DriverDataProvider</argument>
              <argument name="name" xsi:type="string">driver_listing_data_source</argument>
                <argument name="primaryFieldName" xsi:type="string">id</argument>
                  <argument name="requestFieldName" xsi:type="string">id</argument>
                   <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
               <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
              <item name="update_url" xsi:type="url" path="mui/index/render"/>
             <item name="storageConfig" xsi:type="array">
           <item name="indexField" xsi:type="string">id</item>
         <item name="dataScope" xsi:type="string">store_id</item>
      </item>

    <item name="filter_url_params" xsi:type="array">
       <item name="store" xsi:type="string">*</item>
          </item>
                </item>
            </argument>
        </argument>
    </dataSource> 

 

In the second step, add the ‘$’ sign, this->prepares updateUrl(); in the __construct(…).

After that add the first add custom key below the filter_url_params section in the data-provider UI grid, as shown 

 

    /**
     * @return void
     */
    protected function prepareUpdateUrl()
    { 


 if (!isset($this->data['config']['filter_url_params'])) {
            return;
        }
        foreach ($this->data['config']['filter_url_params'] as $paramName => $paramValue) {
            if ('*' == $paramValue) {
                $paramValue = $this->request->getParam($paramName);
            }
            if ($paramValue) {
                $this->data['config']['update_url'] = sprintf(
                    '%s%s/%s/',
                    $this->data['config']['update_url'],
                    $paramName,
                    $paramValue
                );
                $this->addFilter(
                    $this->filterBuilder->setField($paramName)->setValue($paramValue)->setConditionType('eq')->create()
                );
            }
        }
    }

 

 

Conclusion 

Now in the end, as a conclusion, this process will help you to add another filter like store-switcher from outside the grid filters. 

 

 

You might also like-