Newer
Older
TillQliro / Block / Adminhtml / Form / Field / Parameters.php
@Jonas Jonsson Jonas Jonsson on 2 Apr 2024 2 KB Initial
<?php
/**
 * Copyright © Qliro AB. All rights reserved.
 * See LICENSE.txt for license details.
 */

namespace Qliro\QliroOne\Block\Adminhtml\Form\Field;

use Magento\Config\Block\System\Config\Form\Field\FieldArray\AbstractFieldArray;
use Magento\Framework\DataObject;
use Magento\Framework\Exception\LocalizedException;
use Qliro\QliroOne\Model\QliroOrder\Builder\ShippingConfigUnifaunBuilder;

/**
 * Class Ranges
 */
class Parameters extends AbstractFieldArray
{
    /**
     * @var FunctionColumn
     */
    private $functionRenderer;

    /**
     * Prepare rendering the new field by adding all the needed columns
     * @SuppressWarnings(PHPMD.CamelCaseMethodName)
     */
    // phpcs:ignore VCQP.PHP.ProtectedClassMember.FoundProtected
    // phpcs:ignore VCQP.PHP.ProtectedClassMember.FoundProtected,VCQP.Methods.MethodDeclaration.Underscore
    // phpcs:disable CODOR.Classes.PropertyDeclaration.Missing
    protected function _prepareToRender()
    {
        $this->addColumn(
            ShippingConfigUnifaunBuilder::UNIFAUN_TAGS_SETTING_TAG,
            ['label' => \__('Tag'), 'class' => 'required-entry']
        );
        $this->addColumn(
            ShippingConfigUnifaunBuilder::UNIFAUN_TAGS_SETTING_FUNC,
            ['label' => \__('Function'), 'size' => '60', 'renderer' => $this->getFunctionRenderer()]
        );
        $this->addColumn(
            ShippingConfigUnifaunBuilder::UNIFAUN_TAGS_SETTING_VALUE,
            ['label' => \__('Value')]
        );
        $this->_addAfter = false;
        $this->_addButtonLabel = \__('Add');
    }

    /**
     * Prepare existing row data object
     *
     * @param DataObject $row
     * @throws LocalizedException
     */
    protected function _prepareArrayRow(DataObject $row): void
    {
        $options = [];

        $function = $row->getFunc();
        if ($function !== null) {
            $options['option_' . $this->getFunctionRenderer()->calcOptionHash($function)] = 'selected="selected"';
        }

        $row->setData('option_extra_attrs', $options);
    }

    /**
     * @return FunctionColumn
     * @throws LocalizedException
     */
    private function getFunctionRenderer()
    {
        if (!$this->functionRenderer) {
            $this->functionRenderer = $this->getLayout()->createBlock(
                FunctionColumn::class,
                '',
                ['data' => ['is_render_to_js_template' => true]]
            );
        }
        return $this->functionRenderer;
    }
}