/** * Cross-cutting inspector panels shared by every PB field block. * Mount from BaseFieldEdit and from hosts that build their own Fill * (e.g. field-repeater). Each panel gates on its attribute / availability. * * `insideRepeater` is a prop so hosts that already know nesting skip a second walk. */ import ConditionalLogicPanel from './ConditionalLogicPanel'; import FieldVisibilityPanel from './FieldVisibilityPanel'; import EditProfileApprovedByAdminPanel from './EditProfileApprovedByAdminPanel'; import ExtraFieldPropertiesPanel from './ExtraFieldPropertiesPanel'; const has = ( attributes, key ) => Object.prototype.hasOwnProperty.call( attributes, key ); export default function CrossCuttingFieldPanels( { attributes, setAttributes, insideRepeater = false } ) { // Hide CL on sub-fields (never fires) and on free installs (no evaluator). // Attribute stays so stored rules survive a save / downgrade. const conditionalLogicAvailable = window.wppbFb?.conditionalFields?.available !== false; const supportsConditionalLogic = has( attributes, 'conditional-logic-enabled' ) && ! insideRepeater && conditionalLogicAvailable; // Field Visibility only applies to top-level manage-fields rows. const supportsFieldVisibility = has( attributes, 'visibility' ) && ! insideRepeater; const supportsAdminApproval = has( attributes, 'edit-profile-approved-by-admin' ); return ( <> { supportsConditionalLogic && ( ) } { supportsFieldVisibility && ( ) } { supportsAdminApproval && ( ) } ); }