Example #1
0
 /**
  * Add children data
  *
  * @param array $topNode
  * @param UiComponentInterface $component
  * @param string $componentType
  * @return void
  * @throws \Magento\Framework\Exception\LocalizedException
  */
 protected function addChildren(array &$topNode, UiComponentInterface $component, $componentType)
 {
     $childrenAreas = [];
     $collectedComponents = [];
     foreach ($component->getContext()->getDataProvider()->getMeta() as $name => $meta) {
         $childComponent = $component->getComponent($name);
         if (null === $childComponent) {
             continue;
         }
         $collectedComponents[$childComponent->getName()] = true;
         if (isset($meta['is_collection']) && $meta['is_collection'] === true) {
             $label = $childComponent->getData('config/label');
             $this->component->getContext()->addComponentDefinition('collection', ['component' => 'Magento_Ui/js/form/components/collection', 'extends' => $this->namespace]);
             /**
              * @var UiComponentInterface $childComponent
              * @var array $structure
              */
             list($childComponent, $structure) = $this->prepareChildComponents($childComponent, $name);
             $childrenStructure = $structure[$name]['children'];
             $structure[$name]['children'] = [$name . '_collection' => ['type' => 'collection', 'config' => ['active' => 1, 'removeLabel' => __('Remove ' . $label), 'addLabel' => __('Add New ' . $label), 'removeMessage' => $childComponent->getData('config/removeMessage'), 'itemTemplate' => 'item_template'], 'children' => ['item_template' => ['type' => $this->namespace, 'isTemplate' => true, 'component' => 'Magento_Ui/js/form/components/collection/item', 'childType' => 'group', 'config' => ['label' => __('New ' . $label)], 'children' => $childrenStructure]]]];
         } else {
             /**
              * @var UiComponentInterface $childComponent
              * @var array $structure
              */
             list($childComponent, $structure) = $this->prepareChildComponents($childComponent, $name);
         }
         $tabComponent = $this->createTabComponent($childComponent, $name);
         $childrenAreas[$name] = ['type' => $tabComponent->getComponentName(), 'dataScope' => 'data.' . $name, 'config' => isset($meta['config']) ? $meta['config'] : [], 'insertTo' => [$this->namespace . '.sections' => ['position' => $this->getNextSortIncrement()]], 'children' => $structure];
     }
     $this->addWrappedBlock($childrenAreas, $component, $collectedComponents);
     $this->structure[static::AREAS_KEY]['children'] = $childrenAreas;
     $topNode = $this->structure;
 }