_jsHelper = $jsHelper;
$this->_authSession = $authSession;
parent::__construct($context, $data);
}
/**
* Render fieldset html
*
* @param AbstractElement $element
* @return string
*/
public function render(AbstractElement $element)
{
$this->setElement($element);
$header = $this->_getHeaderHtml($element);
$elements = $this->_getChildrenElementsHtml($element);
$footer = $this->_getFooterHtml($element);
return $header . $elements . $footer;
}
/**
* @param AbstractElement $element
* @return string
* @since 100.1.0
*/
protected function _getChildrenElementsHtml(AbstractElement $element)
{
$elements = '';
foreach ($element->getElements() as $field) {
if ($field instanceof \Magento\Framework\Data\Form\Element\Fieldset) {
$elements .= '
'
. '' . $field->toHtml() . ' |
';
} else {
$elements .= $field->toHtml();
}
}
return $elements;
}
/**
* Return header html for fieldset
*
* @param AbstractElement $element
* @return string
*/
protected function _getHeaderHtml($element)
{
if ($element->getIsNested()) {
$html = '';
} else {
$html = ' ';
}
$html .= ' ' .
'';
$html .= $this->_getHeaderTitleHtml($element);
$html .= ' ';
$html .= ' ';
$html .= ' ' . $this->_getExtraJs($element);
if ($element->getIsNested()) {
$html .= ' |
';
} else {
$html .= '';
}
return $html;
}
/**
* Return js code for fieldset:
* - observe fieldset rows;
* - apply collapse;
*
* @param AbstractElement $element
* @return string
*/
protected function _getExtraJs($element)
{
$htmlId = $element->getHtmlId();
$output = "require(['prototype'], function(){Fieldset.applyCollapse('{$htmlId}');});";
return $this->_jsHelper->getScript($output);
}
/**
* Collapsed or expanded fieldset when page loaded?
*
* @param AbstractElement $element
* @return bool
*/
protected function _isCollapseState($element)
{
if ($element->getExpanded() ||
($element->getForm() && $element->getForm()->getElements()->count() === 1)
) {
return true;
}
$extra = $this->_authSession->getUser()->getExtra();
if (isset($extra['configState'][$element->getId()])) {
return $extra['configState'][$element->getId()];
}
return $this->isCollapsedDefault;
}
}