|
10 | 10 | redux.field_objects = redux.field_objects || {};
|
11 | 11 | redux.field_objects.repeater = redux.field_objects.repeater || {};
|
12 | 12 |
|
| 13 | + redux.field_objects.repeater.checkAllDependenciesRecursive = function ( container ) { |
| 14 | + let maxIterations = 5; // Prevent infinite loops |
| 15 | + let iteration = 0; |
| 16 | + let changesFound = true; |
| 17 | + |
| 18 | + while ( changesFound && iteration < maxIterations ) { |
| 19 | + changesFound = false; |
| 20 | + iteration++; |
| 21 | + |
| 22 | + const checkContainer = container.hasClass ? container : $( container ); |
| 23 | + |
| 24 | + checkContainer.find( '.redux-repeater-accordion-repeater' ).each( function() { |
| 25 | + $( this ).find( '.redux-field' ).each( function() { |
| 26 | + const fieldContainer = $( this ).find( 'select, radio, input[type=checkbox], input[type=hidden]' ).first(); |
| 27 | + if ( fieldContainer.length && fieldContainer.hasClass( 'in-repeater' ) ) { |
| 28 | + const fieldElement = $( this ); |
| 29 | + const wasHidden = fieldElement.hasClass( 'hide' ) || fieldElement.parents( 'tr:first' ).hasClass( 'hide' ); |
| 30 | + |
| 31 | + $.redux.check_dependencies( fieldContainer[0] ); |
| 32 | + |
| 33 | + // Check if visibility state changed |
| 34 | + const isHiddenNow = fieldElement.hasClass( 'hide' ) || fieldElement.parents( 'tr:first' ).hasClass( 'hide' ); |
| 35 | + if ( wasHidden !== isHiddenNow ) { |
| 36 | + changesFound = true; |
| 37 | + } |
| 38 | + } |
| 39 | + }); |
| 40 | + }); |
| 41 | + } |
| 42 | + }; |
| 43 | + |
13 | 44 | redux.field_objects.repeater.getOptName = function ( el ) {
|
14 | 45 | let optName;
|
15 | 46 |
|
|
78 | 109 | redux.field_objects.repeater.bindTitle( el );
|
79 | 110 | redux.field_objects.repeater.remove( el, gid );
|
80 | 111 | redux.field_objects.repeater.add( el );
|
| 112 | + |
| 113 | + // Check dependencies after repeater is fully initialized |
| 114 | + // This ensures field visibility is restored based on saved values |
| 115 | + // Use recursive checking to handle multi-level nested dependencies |
| 116 | + setTimeout( function() { |
| 117 | + redux.field_objects.repeater.checkAllDependenciesRecursive( el ); |
| 118 | + }, 100 ); |
81 | 119 | }
|
82 | 120 | );
|
83 | 121 | };
|
|
329 | 367 |
|
330 | 368 | $.redux.initFields();
|
331 | 369 |
|
| 370 | + // Check dependencies for the newly activated panel with recursive checking |
| 371 | + if ( ui.newPanel && ui.newPanel.length ) { |
| 372 | + setTimeout( function() { |
| 373 | + redux.field_objects.repeater.checkAllDependenciesRecursive( ui.newPanel ); |
| 374 | + }, 50 ); |
| 375 | + } |
| 376 | + |
332 | 377 | if ( 'function' === typeof reduxRepeaterAccordionActivate ) {
|
333 | 378 | a = $( this ).next( '.redux-repeaters-add' );
|
334 | 379 | relName = a.attr( 'data-name' );
|
|
589 | 634 | }
|
590 | 635 |
|
591 | 636 | $.redux.initFields();
|
| 637 | + |
| 638 | + // Check for nested dependencies after this field becomes visible |
| 639 | + setTimeout( function() { |
| 640 | + redux.field_objects.repeater.checkAllDependenciesRecursive( childFieldset.closest( '.redux-container-repeater' ) ); |
| 641 | + }, 50 ); |
592 | 642 | }
|
593 | 643 | );
|
594 | 644 | } else {
|
|
0 commit comments