123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Ui\Component\Control;
- use Magento\Framework\View\Element\AbstractBlock;
- use Magento\Framework\View\Element\BlockInterface;
- use Magento\Framework\View\Element\UiComponent\Context;
- use Magento\Framework\View\Element\UiComponentInterface;
- use Magento\Framework\View\Element\UiComponent\Control\ActionPoolInterface;
- /**
- * Class ActionPool
- */
- class ActionPool implements ActionPoolInterface
- {
- /**
- * Actions toolbar block name
- */
- const ACTIONS_PAGE_TOOLBAR = 'page.actions.toolbar';
- /**
- * Render context
- *
- * @var Context
- */
- protected $context;
- /**
- * Actions pool
- *
- * @var Item[]
- */
- protected $items;
- /**
- * Button factory
- *
- * @var ItemFactory
- */
- protected $itemFactory;
- /**
- * @var AbstractBlock
- */
- protected $toolbarBlock;
- /**
- * Construct
- *
- * @param Context $context
- * @param ItemFactory $itemFactory
- */
- public function __construct(Context $context, ItemFactory $itemFactory)
- {
- $this->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;
- }
- }
|