elementFactory = $elementFactory; $this->datafieldsFactory = $datafields->create(); $this->_addAfter = false; $this->_addButtonLabel = __('Add New Attribute'); parent::__construct($context, $data); } /** * @return void */ public function _prepareToRender() { $this->getDatafieldRenderer = null; $this->getAttributeRenderer = null; $this->addColumn( 'attribute', [ 'label' => __('Attribute'), 'style' => 'width:120px', ] ); $this->addColumn( 'datafield', [ 'label' => __('Data Field'), 'style' => 'width:120px', ] ); } /** * @param string $columnName * * @return string */ public function renderCellTemplate($columnName) { if ($columnName == 'attribute' && isset($this->_columns[$columnName])) { $options = $this->getElement()->getValues(); $element = $this->elementFactory->create('select'); $element->setForm( $this->getForm() )->setName( $this->_getCellInputElementName($columnName) )->setHtmlId( $this->_getCellInputElementId('<%- _id %>', $columnName) )->setValues( $options ); return str_replace("\n", '', $element->getElementHtml()); } if ($columnName == 'datafield' && isset($this->_columns[$columnName])) { $options = $this->datafieldsFactory->toOptionArray(); $element = $this->elementFactory->create('select'); $element->setForm( $this->getForm() )->setName( $this->_getCellInputElementName($columnName) )->setHtmlId( $this->_getCellInputElementId('<%- _id %>', $columnName) )->setValues( $options ); return str_replace("\n", '', $element->getElementHtml()); } return parent::renderCellTemplate($columnName); } /** * @param \Magento\Framework\DataObject $row * * @return null */ public function _prepareArrayRow(\Magento\Framework\DataObject $row) { $options = []; $options['option_' . $this->_getAttributeRenderer()->calcOptionHash( $row->getData('attribute') )] = 'selected="selected"'; $options['option_' . $this->_getDatafieldRenderer()->calcOptionHash( $row->getData('datafield') )] = 'selected="selected"'; $row->setData('option_extra_attrs', $options); } /** * @return \Magento\Framework\View\Element\BlockInterface|object * * @throws \Magento\Framework\Exception\LocalizedException */ public function _getAttributeRenderer() { $this->attributeRenderer = $this->getLayout()->createBlock( \Dotdigitalgroup\Email\Block\Adminhtml\Config\Select::class, '', ['data' => ['is_render_to_js_template' => true]] ); return $this->attributeRenderer; } /** * @return \Magento\Framework\View\Element\BlockInterface|object * * @throws \Magento\Framework\Exception\LocalizedException */ public function _getDatafieldRenderer() { $this->datafieldRenderer = $this->getLayout()->createBlock( \Dotdigitalgroup\Email\Block\Adminhtml\Config\Select::class, '', ['data' => ['is_render_to_js_template' => true]] ); return $this->datafieldRenderer; } /** * @return string * * @throws \Exception */ public function _toHtml() { return '' . parent::_toHtml(); } }