Skip to content

Commit abdb9e6

Browse files
committed
Merge remote-tracking branch 'origin/MC-35458' into 2.4-develop-pr75
2 parents 92eec39 + 62e4efc commit abdb9e6

File tree

1 file changed

+64
-0
lines changed
  • app/code/Magento/Config/Block/System/Config/Form

1 file changed

+64
-0
lines changed

app/code/Magento/Config/Block/System/Config/Form/Fieldset.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ protected function _getChildrenElementsHtml(AbstractElement $element)
9696
. '<td colspan="4">' . $field->toHtml() . '</td></tr>';
9797
} else {
9898
$elements .= $field->toHtml();
99+
$styleTag = $this->addVisibilityTag($field);
100+
$elements .= $styleTag;
99101
}
100102
}
101103

@@ -168,11 +170,13 @@ protected function _getFrontendClass($element)
168170
*/
169171
protected function _getHeaderTitleHtml($element)
170172
{
173+
$styleTag = $this->addVisibilityTag($element);
171174
return '<a id="' .
172175
$element->getHtmlId() .
173176
'-head" href="#' .
174177
$element->getHtmlId() .
175178
'-link">' . $element->getLegend() . '</a>' .
179+
$styleTag .
176180
/* @noEscape */ $this->secureRenderer->renderEventListenerAsTag(
177181
'onclick',
178182
'event.preventDefault();' .
@@ -270,10 +274,70 @@ protected function _isCollapseState($element)
270274
return true;
271275
}
272276

277+
if ($this->isCollapseStateByDependentField($element)) {
278+
return false;
279+
}
280+
273281
$extra = $this->_authSession->getUser()->getExtra();
282+
274283
if (isset($extra['configState'][$element->getId()])) {
275284
return $extra['configState'][$element->getId()];
276285
}
277286
return $this->isCollapsedDefault;
278287
}
288+
289+
/**
290+
* Check if element should be collapsed by dependent field value.
291+
*
292+
* @param AbstractElement $element
293+
* @return bool
294+
*/
295+
private function isCollapseStateByDependentField(AbstractElement $element): bool
296+
{
297+
if (!empty($element->getGroup()['depends']['fields'])) {
298+
foreach ($element->getGroup()['depends']['fields'] as $dependFieldData) {
299+
if (is_array($dependFieldData) && isset($dependFieldData['value'], $dependFieldData['id'])) {
300+
$fieldSetForm = $this->getForm();
301+
$dependentFieldConfigValue = $this->_scopeConfig->getValue(
302+
$dependFieldData['id'],
303+
$fieldSetForm->getScope(),
304+
$fieldSetForm->getScopeCode()
305+
);
306+
307+
if ($dependFieldData['value'] !== $dependentFieldConfigValue) {
308+
return true;
309+
}
310+
}
311+
}
312+
}
313+
314+
return false;
315+
}
316+
317+
/**
318+
* If element or it's parent depends on other element we hide it during page load.
319+
*
320+
* @param AbstractElement $field
321+
* @return string
322+
*/
323+
private function addVisibilityTag(AbstractElement $field): string
324+
{
325+
$elementId = '';
326+
$styleTag = '';
327+
328+
if (!empty($field->getFieldConfig()['depends']['fields'])) {
329+
$elementId = '#row_' . $field->getHtmlId();
330+
} elseif (!empty($field->getGroup()['depends']['fields'])) {
331+
$elementId = '#' . $field->getHtmlId() . '-head';
332+
}
333+
334+
if (!empty($elementId)) {
335+
$styleTag .= $this->secureRenderer->renderStyleAsTag(
336+
'display: none;',
337+
$elementId
338+
);
339+
}
340+
341+
return $styleTag;
342+
}
279343
}

0 commit comments

Comments
 (0)