context = $context; $this->itemFactory = $itemFactory; } /** * Get toolbar block * * @return bool|BlockInterface */ public function getToolbar() { return $this->context->getPageLayout() ? $this->context->getPageLayout()->getBlock(static::ACTIONS_PAGE_TOOLBAR) : false; } /** * Add button * * @param string $key * @param array $data * @param UiComponentInterface $component * @return void */ public function add($key, array $data, UiComponentInterface $component) { $data['id'] = isset($data['id']) ? $data['id'] : $key; $toolbar = $this->getToolbar(); if ($toolbar !== false) { $this->items[$key] = $this->itemFactory->create(); $this->items[$key]->setData($data); $container = $this->createContainer($key, $component); $toolbar->setChild($key, $container); } } /** * Remove button * * @param string $key * @return void */ public function remove($key) { unset($this->items[$key]); } /** * Update button * * @param string $key * @param array $data * @return void */ public function update($key, array $data) { if (isset($this->items[$key])) { $this->items[$key]->setData($data); } } /** * Add html block * * @param string $type * @param string $name * @param array $arguments * @return void */ public function addHtmlBlock($type, $name = '', array $arguments = []) { $toolbar = $this->getToolbar(); $container = $this->context->getPageLayout()->createBlock($type, $name, $arguments); if ($toolbar) { $toolbar->setChild($name, $container); } } /** * Create button container * * @param string $key * @param UiComponentInterface $view * @return Container */ protected function createContainer($key, UiComponentInterface $view) { $container = $this->context->getPageLayout()->createBlock( \Magento\Ui\Component\Control\Container::class, 'container-' . $view->getName() . '-' . $key, [ 'data' => [ 'button_item' => $this->items[$key], 'context' => $view, ] ] ); return $container; } }