How we are create massaction in uicomponent grid in Magento

massaction in uicomponent grid in Magento


Hello friend todays im share How we are create massaction in uicomponent grid in Magento

Add this code in uicomponent file - 


<listingToolbar>

 <massaction name="listing_massaction">

            <argument name="data" xsi:type="array">

                <item name="config" xsi:type="array">

                    <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>

                    <item name="indexField" xsi:type="string">entity_id</item>

                </item>

            </argument>

            <action name="delete">

                <argument name="data" xsi:type="array">

                    <item name="config" xsi:type="array">

                        <item name="type" xsi:type="string">delete</item>

                        <item name="label" xsi:type="string" translate="true">Delete</item>

                        <item name="url" xsi:type="url" path="webpushnotification/grid/massdelete/" />

                        <item name="confirm" xsi:type="array">

                            <item name="title" xsi:type="string" translate="true">Delete Data</item>

                            <item name="message" xsi:type="string" translate="true">Are you sure you wan't to delete selected Banners?</item>

                        </item>

                    </item>

                </argument>

            </action>

               <action name="changestatus">

                <argument name="data" xsi:type="array">

                    <item name="config" xsi:type="array">

                        <item name="type" xsi:type="string">changestatus</item>

                        <item name="label" xsi:type="string" translate="true">Change Status</item>

                    </item>

                </argument>

                <argument name="actions" xsi:type="array">

                    <item name="0" xsi:type="array">

                        <item name="type" xsi:type="string">active</item>

                        <item name="label" xsi:type="string" translate="true">Active</item>

                        <item name="url" xsi:type="url" path="webpushnotification/grid/changestatus/">

                            <param name="changestatus">1</param>

                        </item>

                    </item>

                    <item name="1" xsi:type="array">

                        <item name="type" xsi:type="string">inactive</item>

                        <item name="label" xsi:type="string" translate="true">Inactive</item>

                        <item name="url" xsi:type="url" path="webpushnotification/grid/changestatus/">

                            <param name="changestatus">0</param>

                        </item>

                    </item>

                </argument>

            </action>

                <action name="sendmail">

                <argument name="data" xsi:type="array">

                    <item name="config" xsi:type="array">

                        <item name="type" xsi:type="string">status</item>

                        <item name="label" xsi:type="string" translate="true">Send Mail To All Customer</item>

                    </item>

                </argument>

                <argument name="actions" xsi:type="array">

                    <item name="0" xsi:type="array">

                        <item name="type" xsi:type="string">enable</item>

                        <item name="label" xsi:type="string" translate="true">Send</item>

                        <item name="url" xsi:type="url" path="webpushnotification/grid/sendmailtoallcustomer/">

                            <param name="sendmail">1</param>

                        </item>

                    </item>

                </argument>

            </action>

        </massaction>

</listingToolbar>



Create a ChangeStatus.php file in Controller\Adminhtml\Grid 


<?php

namespace Mageget\WebPushNotification\Controller\Adminhtml\Grid;


use Magento\Backend\App\Action;

use Magento\Backend\App\Action\Context;

use Magento\Framework\Controller\ResultFactory;

use Magento\Ui\Component\MassAction\Filter;

use Mageget\WebPushNotification\Model\ResourceModel\Grid\CollectionFactory;


class ChangeStatus extends Action {

    public $collectionFactory;

    public $filter;

    public function __construct(Context $context, Filter $filter, CollectionFactory $collectionFactory) {

        $this->filter = $filter;

        $this->collectionFactory = $collectionFactory;

        parent::__construct($context);

    }

    public function execute() {

        try {

            $collection = $this->filter->getCollection($this->collectionFactory->create());

            $count = 0;

            foreach ($collection as $model) {

                $status = (int)$this->getRequest()->getParam('changestatus');

                $templates = 0;

                foreach ($collection as $template) {

                    try {

                        $template->setStatus($status)->save();

                        $templates++;

                    }

                    catch(Exception $e) {

                        $this->messageManager->addErrorMessage(__('Something went wrong while updating status for %1.', $template->getName()));

                    }

                }

            }

            if ($templates) {

                $this->messageManager->addSuccessMessage(__('A total of %1 record(s) have been updated.', $templates));

            } else {

                $this->messageManager->addSuccess(__('A total of %1 record(s) have been updated.', $templates));

            }

        }

        catch(\Exception $e) {

            $this->messageManager->addError(__($e->getMessage()));

        }

        return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('webpushnotification/grid/index');

    }

}


Deepak Kumar Bind

Success is peace of mind, which is a direct result of self-satisfaction in knowing you made the effort to become the best of which you are capable.

Post a Comment

If you liked this post please do not forget to leave a comment. Thanks

Previous Post Next Post