@@ -280,14 +280,34 @@ public static Object mergeHelper(Object vars, Object diff) {
280280 for (Object var : varsKeys ) {
281281 merged .add (var );
282282 }
283- for (Object varSubscript : diffKeys ) {
284- String strSubscript = (String ) varSubscript ;
285- int subscript = Integer .parseInt (strSubscript .substring (1 , strSubscript .length () - 1 ));
286- Object var = diffMap != null ? diffMap .get (strSubscript ) : null ;
287- while (subscript >= merged .size ()) {
288- merged .add (null );
283+
284+ // Merge values from server
285+ // Array values from server come as Dictionary
286+ // Example:
287+ // string[] items = new string[] { "Item 1", "Item 2"};
288+ // args.With<string[]>("Items", items); // Action Context arg value
289+ // "vars": {
290+ // "Items": {
291+ // "[1]": "Item 222", // Modified value from server
292+ // "[0]": "Item 111" // Modified value from server
293+ // }
294+ // }
295+ // Prevent error when loading variable diffs where the diff is an Array and not Dictionary
296+ if (diffMap != null ) {
297+ for (Object varSubscript : diffKeys ) {
298+ if (varSubscript instanceof String ) {
299+ String strSubscript = (String ) varSubscript ;
300+ if (strSubscript .length () > 2 && strSubscript .startsWith ("[" ) && strSubscript .endsWith ("]" )) {
301+ // Get the index from the string key: "[0]" -> 0
302+ int subscript = Integer .parseInt (strSubscript .substring (1 , strSubscript .length () - 1 ));
303+ Object var = diffMap .get (strSubscript );
304+ while (subscript >= merged .size () && merged .size () < Short .MAX_VALUE ) {
305+ merged .add (null );
306+ }
307+ merged .set (subscript , mergeHelper (merged .get (subscript ), var ));
308+ }
309+ }
289310 }
290- merged .set (subscript , mergeHelper (merged .get (subscript ), var ));
291311 }
292312 return merged ;
293313 }
0 commit comments