Multiline.php 2.37 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Ui\Component\Form\Element;

use Magento\Ui\Component\Form\Field;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Framework\View\Element\UiComponentInterface;
use Magento\Framework\View\Element\UiComponent\ContextInterface;

/**
 * @api
 * @since 100.0.2
 */
class Multiline extends AbstractElement
{
    const NAME = 'multiline';

    const FORM_ELEMENT = 'input';

    const DATA_TYPE = 'text';

    /**
     * UI component factory
     *
     * @var UiComponentFactory
     */
    protected $uiComponentFactory;

    /**
     * Constructor
     *
     * @param ContextInterface $context
     * @param UiComponentFactory $uiComponentFactory
     * @param UiComponentInterface[] $components
     * @param array $data
     */
    public function __construct(
        ContextInterface $context,
        UiComponentFactory $uiComponentFactory,
        array $components = [],
        array $data = []
    ) {
        $this->uiComponentFactory = $uiComponentFactory;
        parent::__construct($context, $components, $data);
    }

    /**
     * Get component name
     *
     * @return string
     */
    public function getComponentName()
    {
        return static::NAME;
    }

    /**
     * Prepare component configuration
     *
     * @return void
     */
    public function prepare()
    {
        $size = abs((int) $this->getData('config/size'));
        $validation = [$this->getData('config/validation')];
        while ($size--) {
            $identifier = $this->getName() . '_' . $size;
            $arguments = [
                'data' => [
                    'name' => $identifier,
                    'config' => [
                        'dataScope' => $size,
                        'dataType' => static::DATA_TYPE,
                        'formElement' => static::FORM_ELEMENT,
                        'sortOrder' => $size,
                    ]
                ]
            ];

            if (!empty($validation[$size])) {
                $arguments['data']['config']['validation'] = $validation[$size];
            }

            $component = $this->uiComponentFactory->create($identifier, Field::NAME, $arguments);
            $component->prepare();

            $this->components[$identifier] = $component;
        }
        parent::prepare();
    }
}