Blog

Hide Mass Actions Based On Some Conditions in Magento 2

In this article, we are going to discuss about applying condition on the massaction. The following are the steps to implement this.

Step 1: Display Massaction on the content Pages in Magento2

Step 2:  Apply Condition to Show or Hide Newly Created Massaction

Lets start…

Step 1: Display Massaction on the content Pages in Magento2

Lets assume that you need to display massaction on the Admin – Content Pages.

Create file located at Thecoachsmb/ToggleMassaction/view/adminhtml/ui_component/cms_page_listing.xml

and content will be:-

<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <listingToolbar name="listing_top">
        <massaction name="listing_massaction" class="Thecoachsmb\ToggleMassaction\Ui\Component\MassAction">
            <action name="custommassaction">
                <settings>
                    <confirm>
                        <message translate="true">Are you sure to perform Action for selected customers?</message>
                        <title translate="true">Custom MassAction</title>
                    </confirm>
                    <url path="extension/controller/massAction"/> <!-- your custom controller to handle request -->
                    <type>custommassaction</type>
                    <label translate="true">Custom MassAction</label>
                </settings>
            </action>
        </massaction>
    </listingToolbar>
</listing>

Step 2:  Apply Condition to Show or Hide Newly Created Massaction

Create file at

Thecoachsmb\ToggleMassaction\Ui\Component\MassAction.php

and content will be :

<?php
namespace Thecoachsmb\ToggleMassaction\Ui\Component;
use Magento\Contact\Helper\Data;

class MassAction extends \Magento\Ui\Component\MassAction
{
    /**
     * @param \Magento\Framework\App\Helper\Context $context
     * @param \Magento\Customer\Model\Session $customerSession
     * @param CustomerViewHelper $customerViewHelper
     */

    public function __construct(
        \Magento\Framework\App\Helper\Context $context,
        Data $contacthelper
    ) {
        $this->contacthelper = $contacthelper;
        parent::__construct($context);
    }

    public function prepare()
    {
        parent::prepare();
        $result = $this->contacthelper->isEnabled();
        if ($result == 0) {
            $config = $this->getConfiguration();
            $notAllowedActions = ['custommassaction'];
            $allowedActions = [];
            foreach ($config['actions'] as $action) {
                if (!in_array($action['type'], $notAllowedActions)) {
                    $allowedActions[] = $action;
                }
            }
            $config['actions'] = $allowedActions;
            $this->setData('config', (array)$config);
        }
    }
}

We have applied the condition that the if the contact us module is enabled then show this massaction.

 

Leave a Reply

Your email address will not be published. Required fields are marked *