Skip to content

Commit 6db3555

Browse files
calvincestarigh-action-runner
authored and
gh-action-runner
committed
fix: DataDict initialization of deferredFragments (apollographql/apollo-ios-dev#557)
1 parent f20dccb commit 6db3555

File tree

1 file changed

+46
-4
lines changed

1 file changed

+46
-4
lines changed

Sources/ApolloCodegenLib/Templates/SelectionSetTemplate.swift

+46-4
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,9 @@ struct SelectionSetTemplate {
604604
private func InitializerTemplate(
605605
_ selectionSet: ComputedSelectionSet
606606
) -> TemplateString {
607+
let containsDeferredFragment = (selectionSet.direct?.inlineFragments.containsDeferredFragment ?? false) ||
608+
(selectionSet.direct?.namedFragments.containsDeferredFragment ?? false)
609+
607610
return """
608611
\(renderAccessControl())init(
609612
\(InitializerSelectionParametersTemplate(selectionSet))
@@ -612,7 +615,14 @@ struct SelectionSetTemplate {
612615
data: [
613616
\(InitializerDataDictTemplate(selectionSet))
614617
],
615-
fulfilledFragments: \(InitializerFulfilledFragments(selectionSet))
618+
fulfilledFragments: [
619+
\(InitializerFulfilledFragments(selectionSet))
620+
]\(if: containsDeferredFragment, """
621+
,
622+
deferredFragments: [
623+
\(InitializerDeferredFragments(selectionSet))
624+
]
625+
""")
616626
))
617627
}
618628
"""
@@ -708,9 +718,41 @@ struct SelectionSetTemplate {
708718
}
709719

710720
return """
711-
[
712-
\(fulfilledFragments.map { "ObjectIdentifier(\($0).self)" })
713-
]
721+
\(fulfilledFragments.map { "ObjectIdentifier(\($0).self)" })
722+
"""
723+
}
724+
725+
private func InitializerDeferredFragments(
726+
_ selectionSet: ComputedSelectionSet
727+
) -> TemplateString? {
728+
guard let directSelections = selectionSet.direct else { return nil }
729+
730+
var deferredFragments: OrderedSet<String> = []
731+
732+
let nameGenerator: (_ typeInfo: SelectionSet.TypeInfo) -> String = { typeInfo in
733+
SelectionSetNameGenerator.generatedSelectionSetName(
734+
for: typeInfo,
735+
format: .fullyQualified,
736+
pluralizer: config.pluralizer
737+
)
738+
}
739+
740+
for inlineFragmentSpread in directSelections.inlineFragments.values.elements {
741+
if inlineFragmentSpread.typeInfo.isDeferred {
742+
let selectionSetName = nameGenerator(inlineFragmentSpread.typeInfo)
743+
deferredFragments.append(selectionSetName)
744+
}
745+
}
746+
747+
for namedFragment in directSelections.namedFragments.values.elements {
748+
if namedFragment.typeInfo.isDeferred {
749+
let selectionSetName = nameGenerator(namedFragment.typeInfo)
750+
deferredFragments.append(selectionSetName)
751+
}
752+
}
753+
754+
return """
755+
\(deferredFragments.map { "ObjectIdentifier(\($0).self)" })
714756
"""
715757
}
716758

0 commit comments

Comments
 (0)