@@ -1057,24 +1057,25 @@ def _get_incremental_defer_result(
1057
1057
"""Get the incremental defer result from the grouped field set record."""
1058
1058
data = deferred_grouped_field_set_record .data
1059
1059
fragment_records = deferred_grouped_field_set_record .deferred_fragment_records
1060
- max_length = len (fragment_records [0 ].path )
1061
- max_index = 0
1062
- for i in range (1 , len (fragment_records )):
1063
- fragment_record = fragment_records [i ]
1060
+ max_length : int | None = None
1061
+ id_with_longest_path : str | None = None
1062
+ for fragment_record in fragment_records :
1063
+ if fragment_record .id is None :
1064
+ continue
1064
1065
length = len (fragment_record .path )
1065
- if length > max_length :
1066
+ if max_length is None or length > max_length :
1066
1067
max_length = length
1067
- max_index = i
1068
- record_with_longest_path = fragment_records [max_index ]
1069
- longest_path = record_with_longest_path .path
1070
- sub_path = deferred_grouped_field_set_record .path [len (longest_path ) :]
1071
- id_ = record_with_longest_path .id
1068
+ id_with_longest_path = fragment_record .id
1069
+
1070
+ sub_path = deferred_grouped_field_set_record .path [max_length :]
1071
+
1072
1072
return IncrementalDeferResult (
1073
1073
# safe because `data` is always defined when the record is completed
1074
1074
data , # type: ignore
1075
- # safe because `id` is defined
1076
- # once the fragment has been released as pending
1077
- id_ , # type: ignore
1075
+ # safe because `id` is always defined once the fragment has been released
1076
+ # as pending and at least one fragment has been completed, so must have been
1077
+ # released as pending
1078
+ id_with_longest_path , # type: ignore
1078
1079
sub_path or None ,
1079
1080
)
1080
1081
0 commit comments