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');
}
}