Para adicionar uma ação em massa customizada à grade da interface do usuário com base em alguma condição, você pode usar a classe customizada para o componente da interface do usuário da massaction:
<!--/app/code/YourNamespace/YourModule/view/adminhtml/ui_component/product_listing.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">
<listingToolbar name="listing_top">
<massaction name="listing_massaction" class="YourNamespace\YourModule\Ui\CustomMassAction"/>
</listingToolbar>
</listing>
E implemente essa classe estendendo o componente principal do módulo Magento_Ui.
namespace YourNamespace\YourModule\Ui;
use Magento\Ui\Component\MassAction;
class CustomMassAction extends MassAction
{
public function prepare()
{
parent::prepare();
if ($this->isEnabled()) {
$config = $this->getConfiguration();
$config['actions'][] = [
'component' => 'uiComponent',
'type' => 'custom',
'label' => 'Custom',
'url' => '//google.com'
];
$this->setData('config', $config);
}
}
public function isEnabled()
{
return true; // access your configuration here
}
}
Como alternativa, você pode aplicar a abordagem vice-versa :). Especifique a configuração para sua massa product_listing.xml
e remova sua ação da configuração na classe de massa customizada, se ela estiver desativada em sua configuração.
Outra maneira de personalizar ações em massa é adicionar um plugin para Magento\Ui\Component\MassAction::prepare
.