@@ -74,15 +74,27 @@ public static function createBasicProperties(ControlDefinition $definition): arr
7474 * Creates attributes for properties in Drupal FormElement for a Control.
7575 *
7676 * @phpstan-return array<string, mixed>
77+ *
78+ * phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
7779 */
7880 public static function createFieldProperties (ControlDefinition $ definition , FormStateInterface $ formState ): array {
81+ // phpcs:enable
7982 $ form = [
8083 '#disabled ' => $ definition ->isReadOnly (),
8184 '#required ' => $ definition ->isRequired (),
8285 '#limit_validation_errors ' => [],
8386 '#_nullable ' => $ definition ->isNullable (),
8487 ];
8588
89+ $ calcInitField = FALSE ;
90+ if ($ definition ->isCalculated ()) {
91+ $ formState ->set ('$calculateUsed ' , TRUE );
92+ }
93+ elseif (!$ formState ->has ('$hasCalcInitField ' )) {
94+ $ formState ->set ('$hasCalcInitField ' , TRUE );
95+ $ calcInitField = TRUE ;
96+ }
97+
8698 $ readOnlyValuePath = array_merge (['readOnlyValues ' ], $ definition ->getPropertyPath ());
8799 if ((!$ formState ->isCached () || $ definition ->isReadOnly ())
88100 && $ formState ->hasTemporaryValue ($ definition ->getPropertyPath ())
@@ -112,7 +124,7 @@ public static function createFieldProperties(ControlDefinition $definition, Form
112124 $ form ['#value ' ] = $ definition ->getConst ();
113125 }
114126
115- if (!$ form ['#disabled ' ] && TRUE === $ formState ->get ('recalculateOnChange ' )) {
127+ if (( !$ form ['#disabled ' ] && TRUE === $ formState ->get ('recalculateOnChange ' )) || $ calcInitField ) {
116128 $ form ['#ajax ' ] = [
117129 'callback ' => RecalculateCallback::class . '::onChange ' ,
118130 'event ' => 'change ' ,
@@ -121,7 +133,13 @@ public static function createFieldProperties(ControlDefinition $definition, Form
121133 ];
122134 }
123135
124- return array_merge (static ::createBasicProperties ($ definition ), $ form );
136+ $ form += static ::createBasicProperties ($ definition );
137+ if ($ calcInitField ) {
138+ // @phpstan-ignore offsetAccess.nonOffsetAccessible
139+ $ form ['#attributes ' ]['data-json-forms-init-calculation ' ] = '1 ' ;
140+ }
141+
142+ return $ form ;
125143 }
126144
127145}
0 commit comments