Skip to content

Commit 40d368f

Browse files
authored
[WEB-671]: Setup TriggerCapiEventInput GraphQL Mutation (#1792)
* set up TriggerCapiEventInput mutation * set up TriggerCapiEventInput mutation * Add TriggerCapiEventInputTests
1 parent e273a8b commit 40d368f

11 files changed

+1050
-164
lines changed

Kickstarter.xcodeproj/project.pbxproj

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,11 @@
485485
6067BCEC293E49F00036ABB1 /* FacebookResetPasswordViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6067BCEA293E49CB0036ABB1 /* FacebookResetPasswordViewModel.swift */; };
486486
6067BCF2293FC3520036ABB1 /* FacebookResetPasswordViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6067BCEF293FC10E0036ABB1 /* FacebookResetPasswordViewModelTests.swift */; };
487487
606F214429799A1200BA5CDF /* ATTrackingAuthorizationStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606F214229799A0000BA5CDF /* ATTrackingAuthorizationStatus.swift */; };
488+
606F215C299D3FA900BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606F215A299D3EF800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInputTests.swift */; };
489+
606F215E299D414800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606F215D299D414800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInput.swift */; };
490+
606F2166299D456D00BA5CDF /* TriggerCapiEvent.graphql in Sources */ = {isa = PBXBuildFile; fileRef = 606F2165299D456D00BA5CDF /* TriggerCapiEvent.graphql */; };
491+
606F2168299D45F900BA5CDF /* TriggerCapiEventInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606F2167299D45F900BA5CDF /* TriggerCapiEventInput.swift */; };
492+
606F216B299E8D8500BA5CDF /* TriggerCapiEventInputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606F2169299E8C9F00BA5CDF /* TriggerCapiEventInputTests.swift */; };
488493
608E7A5328ABDBAE00289E92 /* SetYourPasswordViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 608E7A5128ABD5E700289E92 /* SetYourPasswordViewController.swift */; };
489494
608E7A5628ABE6CD00289E92 /* SetYourPasswordViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 608E7A5428ABE27400289E92 /* SetYourPasswordViewModel.swift */; };
490495
60DA50EB28B689A4002E2DF1 /* SetYourPasswordViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60DA50E928B68990002E2DF1 /* SetYourPasswordViewModelTests.swift */; };
@@ -2071,6 +2076,11 @@
20712076
6067BCEA293E49CB0036ABB1 /* FacebookResetPasswordViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FacebookResetPasswordViewModel.swift; sourceTree = "<group>"; };
20722077
6067BCEF293FC10E0036ABB1 /* FacebookResetPasswordViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FacebookResetPasswordViewModelTests.swift; sourceTree = "<group>"; };
20732078
606F214229799A0000BA5CDF /* ATTrackingAuthorizationStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ATTrackingAuthorizationStatus.swift; sourceTree = "<group>"; };
2079+
606F215A299D3EF800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInputTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphAPI.TriggerCapiEventInput+TriggerCapiEventInputTests.swift"; sourceTree = "<group>"; };
2080+
606F215D299D414800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphAPI.TriggerCapiEventInput+TriggerCapiEventInput.swift"; sourceTree = "<group>"; };
2081+
606F2165299D456D00BA5CDF /* TriggerCapiEvent.graphql */ = {isa = PBXFileReference; lastKnownFileType = text; path = TriggerCapiEvent.graphql; sourceTree = "<group>"; };
2082+
606F2167299D45F900BA5CDF /* TriggerCapiEventInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriggerCapiEventInput.swift; sourceTree = "<group>"; };
2083+
606F2169299E8C9F00BA5CDF /* TriggerCapiEventInputTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TriggerCapiEventInputTests.swift; sourceTree = "<group>"; };
20742084
608E7A5128ABD5E700289E92 /* SetYourPasswordViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetYourPasswordViewController.swift; sourceTree = "<group>"; };
20752085
608E7A5428ABE27400289E92 /* SetYourPasswordViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetYourPasswordViewModel.swift; sourceTree = "<group>"; };
20762086
60DA50E928B68990002E2DF1 /* SetYourPasswordViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetYourPasswordViewModelTests.swift; sourceTree = "<group>"; };
@@ -5851,6 +5861,7 @@
58515861
06261602273B0E1500389981 /* PostComment.graphql */,
58525862
062868E526B999EF00EC5052 /* DeletePaymentSource.graphql */,
58535863
47D7D09526C2EA5200D2BAB5 /* SignInWithApple.graphql */,
5864+
606F2165299D456D00BA5CDF /* TriggerCapiEvent.graphql */,
58545865
8AC3E0F4269F48A400168BF8 /* UpdateBacking.graphql */,
58555866
06643F3926A5FF1C002C5997 /* UpdateUserAccount.graphql */,
58565867
06C38CB826A9D13400591CED /* UpdateUserProfile.graphql */,
@@ -6064,6 +6075,8 @@
60646075
06962F8E273B3DF200FB0B3D /* GraphAPI.PostCommentInput+PostCommentInputTests.swift */,
60656076
47D7D09726C2ECB300D2BAB5 /* GraphAPI.SignInWithAppleInput+SignInWithAppleInput.swift */,
60666077
47D7D09B26C2FA5F00D2BAB5 /* GraphAPI.SignInWithAppleInput+SignInWithAppleInputTests.swift */,
6078+
606F215D299D414800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInput.swift */,
6079+
606F215A299D3EF800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInputTests.swift */,
60676080
8AC3E10C269F4D4000168BF8 /* GraphAPI.UpdateBackingInput+UpdateBackingInput.swift */,
60686081
8AC3E111269F4DAF00168BF8 /* GraphAPI.UpdateBackingInput+UpdateBackingInputTests.swift */,
60696082
06643F3B26A61338002C5997 /* GraphAPI.UpdateUserAccountInput+UpdateUserAccountInput.swift */,
@@ -7166,6 +7179,8 @@
71667179
47A662F826AF7745001CE7B1 /* WatchProjectInputTests.swift */,
71677180
D6F5C6102437E12300C1A79D /* SignInWithAppleInput.swift */,
71687181
77C0818D245CBA1B004ABE88 /* SignInWithAppleInputTests.swift */,
7182+
606F2167299D45F900BA5CDF /* TriggerCapiEventInput.swift */,
7183+
606F2169299E8C9F00BA5CDF /* TriggerCapiEventInputTests.swift */,
71697184
4753C76E264DAFD300BB10B6 /* PostCommentInput.swift */,
71707185
4753C78E264EE1B100BB10B6 /* PostCommentInputTests.swift */,
71717186
);
@@ -8759,6 +8774,7 @@
87598774
D01589811EEB2ED7006E7684 /* Update.swift in Sources */,
87608775
8AC3E00726961E6400168BF8 /* Reward+RewardFragment.swift in Sources */,
87618776
378CA24622C4449F004E3C86 /* CountryLenses.swift in Sources */,
8777+
606F215E299D414800BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInput.swift in Sources */,
87628778
476A2A6425DEED2600EB6A56 /* PerimeterXTypes.swift in Sources */,
87638779
D0158A161EEB30A2006E7684 /* ItemTemplates.swift in Sources */,
87648780
D63BBD33217F9CDE007E01F0 /* GraphCreditCardTemplate.swift in Sources */,
@@ -8876,6 +8892,7 @@
88768892
D01588531EEB2ED7006E7684 /* ChangePaymentMethodEnvelope.swift in Sources */,
88778893
D01588E51EEB2ED7006E7684 /* Location.swift in Sources */,
88788894
8A15571D2693B29600017845 /* Comment+CommentFragment.swift in Sources */,
8895+
606F2168299D45F900BA5CDF /* TriggerCapiEventInput.swift in Sources */,
88798896
06232D442795EC4300A81755 /* ExternalSourceViewElement.swift in Sources */,
88808897
8A67DDB624DCB7D500B4AB10 /* Constants.swift in Sources */,
88818898
D01588A11EEB2ED7006E7684 /* MessageThreadLenses.swift in Sources */,
@@ -8939,6 +8956,7 @@
89398956
D01589931EEB2ED7006E7684 /* User.swift in Sources */,
89408957
D0158A271EEB30A2006E7684 /* ShippingRuleTemplates.swift in Sources */,
89418958
06566375270BAA7C00CE7EDF /* Project+FetchProjectRewardsByIdQueryData.swift in Sources */,
8959+
606F2166299D456D00BA5CDF /* TriggerCapiEvent.graphql in Sources */,
89428960
8AF34C782342D6A5000B211D /* Encodable+Dictionary.swift in Sources */,
89438961
77E44B7421823A56006446B8 /* ChangePasswordInput.swift in Sources */,
89448962
06B3605F26E15A5E006CB9E4 /* Project+FetchProjectQueryData.swift in Sources */,
@@ -9046,6 +9064,7 @@
90469064
06D00FAB26EFA95300E11E38 /* UserFragmentTemplate.swift in Sources */,
90479065
77DB532A2215D0AA0078991C /* UserCreditCardsTests.swift in Sources */,
90489066
D01589A21EEB2ED7006E7684 /* ServiceTypeTests.swift in Sources */,
9067+
606F215C299D3FA900BA5CDF /* GraphAPI.TriggerCapiEventInput+TriggerCapiEventInputTests.swift in Sources */,
90499068
D0D10C0F1EEB4550005EBAD0 /* LocationTests.swift in Sources */,
90509069
06032A8E26CEB3E50013AAB9 /* CommentFragmentTemplate.swift in Sources */,
90519070
D0D10C121EEB4550005EBAD0 /* Project.CountryTests.swift in Sources */,
@@ -9114,6 +9133,7 @@
91149133
77FA1AF32445FB810035D659 /* GraphUserTests.swift in Sources */,
91159134
066C0AE926CC20490048F4D8 /* SignInWithAppleMutationTemplate.swift in Sources */,
91169135
D0D10C021EEB4550005EBAD0 /* ActivityTests.swift in Sources */,
9136+
606F216B299E8D8500BA5CDF /* TriggerCapiEventInputTests.swift in Sources */,
91179137
06032A9026CEC3290013AAB9 /* FetchUpdateCommentsQueryTemplate.swift in Sources */,
91189138
D01589A81EEB306D006E7684 /* EncodableTests.swift in Sources */,
91199139
D0D10C111EEB4550005EBAD0 /* MessageThreadTests.swift in Sources */,

KsApi/GraphAPI.swift

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,150 @@ public enum GraphAPI {
578578
}
579579
}
580580

581+
/// Autogenerated input type of TriggerCapiEvent
582+
public struct TriggerCapiEventInput: GraphQLMapConvertible {
583+
public var graphQLMap: GraphQLMap
584+
585+
/// - Parameters:
586+
/// - projectId
587+
/// - eventName
588+
/// - externalId
589+
/// - userEmail
590+
/// - appData
591+
/// - customData
592+
/// - waitForConsent
593+
/// - clientMutationId: A unique identifier for the client performing the mutation.
594+
public init(projectId: GraphQLID, eventName: String, externalId: String, userEmail: Swift.Optional<String?> = nil, appData: Swift.Optional<AppDataInput?> = nil, customData: Swift.Optional<CustomDataInput?> = nil, waitForConsent: Swift.Optional<Bool?> = nil, clientMutationId: Swift.Optional<String?> = nil) {
595+
graphQLMap = ["projectId": projectId, "eventName": eventName, "externalId": externalId, "userEmail": userEmail, "appData": appData, "customData": customData, "waitForConsent": waitForConsent, "clientMutationId": clientMutationId]
596+
}
597+
598+
public var projectId: GraphQLID {
599+
get {
600+
return graphQLMap["projectId"] as! GraphQLID
601+
}
602+
set {
603+
graphQLMap.updateValue(newValue, forKey: "projectId")
604+
}
605+
}
606+
607+
public var eventName: String {
608+
get {
609+
return graphQLMap["eventName"] as! String
610+
}
611+
set {
612+
graphQLMap.updateValue(newValue, forKey: "eventName")
613+
}
614+
}
615+
616+
public var externalId: String {
617+
get {
618+
return graphQLMap["externalId"] as! String
619+
}
620+
set {
621+
graphQLMap.updateValue(newValue, forKey: "externalId")
622+
}
623+
}
624+
625+
public var userEmail: Swift.Optional<String?> {
626+
get {
627+
return graphQLMap["userEmail"] as? Swift.Optional<String?> ?? Swift.Optional<String?>.none
628+
}
629+
set {
630+
graphQLMap.updateValue(newValue, forKey: "userEmail")
631+
}
632+
}
633+
634+
public var appData: Swift.Optional<AppDataInput?> {
635+
get {
636+
return graphQLMap["appData"] as? Swift.Optional<AppDataInput?> ?? Swift.Optional<AppDataInput?>.none
637+
}
638+
set {
639+
graphQLMap.updateValue(newValue, forKey: "appData")
640+
}
641+
}
642+
643+
public var customData: Swift.Optional<CustomDataInput?> {
644+
get {
645+
return graphQLMap["customData"] as? Swift.Optional<CustomDataInput?> ?? Swift.Optional<CustomDataInput?>.none
646+
}
647+
set {
648+
graphQLMap.updateValue(newValue, forKey: "customData")
649+
}
650+
}
651+
652+
public var waitForConsent: Swift.Optional<Bool?> {
653+
get {
654+
return graphQLMap["waitForConsent"] as? Swift.Optional<Bool?> ?? Swift.Optional<Bool?>.none
655+
}
656+
set {
657+
graphQLMap.updateValue(newValue, forKey: "waitForConsent")
658+
}
659+
}
660+
661+
/// A unique identifier for the client performing the mutation.
662+
public var clientMutationId: Swift.Optional<String?> {
663+
get {
664+
return graphQLMap["clientMutationId"] as? Swift.Optional<String?> ?? Swift.Optional<String?>.none
665+
}
666+
set {
667+
graphQLMap.updateValue(newValue, forKey: "clientMutationId")
668+
}
669+
}
670+
}
671+
672+
/// Parameters for sharing app data and device information with the Conversions API
673+
public struct AppDataInput: GraphQLMapConvertible {
674+
public var graphQLMap: GraphQLMap
675+
676+
/// - Parameters:
677+
/// - extinfo: Extended device information, such as screen width and height. Required only for native.
678+
public init(extinfo: [String]) {
679+
graphQLMap = ["extinfo": extinfo]
680+
}
681+
682+
/// Extended device information, such as screen width and height. Required only for native.
683+
public var extinfo: [String] {
684+
get {
685+
return graphQLMap["extinfo"] as! [String]
686+
}
687+
set {
688+
graphQLMap.updateValue(newValue, forKey: "extinfo")
689+
}
690+
}
691+
}
692+
693+
/// A map that includes additional business data about the CAPI event.
694+
public struct CustomDataInput: GraphQLMapConvertible {
695+
public var graphQLMap: GraphQLMap
696+
697+
/// - Parameters:
698+
/// - currency: The currency for the value specified, if applicable. Currency must be a valid ISO 4217 three-digit currency code.
699+
/// - value: A numeric value associated with this event. This could be a monetary value or a value in some other metric.
700+
public init(currency: Swift.Optional<String?> = nil, value: Swift.Optional<String?> = nil) {
701+
graphQLMap = ["currency": currency, "value": value]
702+
}
703+
704+
/// The currency for the value specified, if applicable. Currency must be a valid ISO 4217 three-digit currency code.
705+
public var currency: Swift.Optional<String?> {
706+
get {
707+
return graphQLMap["currency"] as? Swift.Optional<String?> ?? Swift.Optional<String?>.none
708+
}
709+
set {
710+
graphQLMap.updateValue(newValue, forKey: "currency")
711+
}
712+
}
713+
714+
/// A numeric value associated with this event. This could be a monetary value or a value in some other metric.
715+
public var value: Swift.Optional<String?> {
716+
get {
717+
return graphQLMap["value"] as? Swift.Optional<String?> ?? Swift.Optional<String?>.none
718+
}
719+
set {
720+
graphQLMap.updateValue(newValue, forKey: "value")
721+
}
722+
}
723+
}
724+
581725
/// Autogenerated input type of UnwatchProject
582726
public struct UnwatchProjectInput: GraphQLMapConvertible {
583727
public var graphQLMap: GraphQLMap
@@ -4190,6 +4334,100 @@ public enum GraphAPI {
41904334
}
41914335
}
41924336

4337+
public final class TriggerCapiEventMutation: GraphQLMutation {
4338+
/// The raw GraphQL definition of this operation.
4339+
public let operationDefinition: String =
4340+
"""
4341+
mutation triggerCAPIEvent($input: TriggerCapiEventInput!) {
4342+
triggerCAPIEvent(input: $input) {
4343+
__typename
4344+
success
4345+
}
4346+
}
4347+
"""
4348+
4349+
public let operationName: String = "triggerCAPIEvent"
4350+
4351+
public var input: TriggerCapiEventInput
4352+
4353+
public init(input: TriggerCapiEventInput) {
4354+
self.input = input
4355+
}
4356+
4357+
public var variables: GraphQLMap? {
4358+
return ["input": input]
4359+
}
4360+
4361+
public struct Data: GraphQLSelectionSet {
4362+
public static let possibleTypes: [String] = ["Mutation"]
4363+
4364+
public static var selections: [GraphQLSelection] {
4365+
return [
4366+
GraphQLField("triggerCAPIEvent", arguments: ["input": GraphQLVariable("input")], type: .object(TriggerCapiEvent.selections)),
4367+
]
4368+
}
4369+
4370+
public private(set) var resultMap: ResultMap
4371+
4372+
public init(unsafeResultMap: ResultMap) {
4373+
self.resultMap = unsafeResultMap
4374+
}
4375+
4376+
public init(triggerCapiEvent: TriggerCapiEvent? = nil) {
4377+
self.init(unsafeResultMap: ["__typename": "Mutation", "triggerCAPIEvent": triggerCapiEvent.flatMap { (value: TriggerCapiEvent) -> ResultMap in value.resultMap }])
4378+
}
4379+
4380+
/// Triggers Meta's CAPI event for native
4381+
public var triggerCapiEvent: TriggerCapiEvent? {
4382+
get {
4383+
return (resultMap["triggerCAPIEvent"] as? ResultMap).flatMap { TriggerCapiEvent(unsafeResultMap: $0) }
4384+
}
4385+
set {
4386+
resultMap.updateValue(newValue?.resultMap, forKey: "triggerCAPIEvent")
4387+
}
4388+
}
4389+
4390+
public struct TriggerCapiEvent: GraphQLSelectionSet {
4391+
public static let possibleTypes: [String] = ["TriggerCapiEventPayload"]
4392+
4393+
public static var selections: [GraphQLSelection] {
4394+
return [
4395+
GraphQLField("__typename", type: .nonNull(.scalar(String.self))),
4396+
GraphQLField("success", type: .nonNull(.scalar(Bool.self))),
4397+
]
4398+
}
4399+
4400+
public private(set) var resultMap: ResultMap
4401+
4402+
public init(unsafeResultMap: ResultMap) {
4403+
self.resultMap = unsafeResultMap
4404+
}
4405+
4406+
public init(success: Bool) {
4407+
self.init(unsafeResultMap: ["__typename": "TriggerCapiEventPayload", "success": success])
4408+
}
4409+
4410+
public var __typename: String {
4411+
get {
4412+
return resultMap["__typename"]! as! String
4413+
}
4414+
set {
4415+
resultMap.updateValue(newValue, forKey: "__typename")
4416+
}
4417+
}
4418+
4419+
public var success: Bool {
4420+
get {
4421+
return resultMap["success"]! as! Bool
4422+
}
4423+
set {
4424+
resultMap.updateValue(newValue, forKey: "success")
4425+
}
4426+
}
4427+
}
4428+
}
4429+
}
4430+
41934431
public final class UnwatchProjectMutation: GraphQLMutation {
41944432
/// The raw GraphQL definition of this operation.
41954433
public let operationDefinition: String =

KsApi/MockService.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838

3939
fileprivate let deletePaymentMethodResult: Result<DeletePaymentMethodEnvelope, ErrorEnvelope>?
4040

41+
fileprivate let triggerCapiEventResult: Result<EmptyResponseEnvelope, ErrorEnvelope>?
42+
4143
fileprivate let facebookConnectResponse: User?
4244
fileprivate let facebookConnectError: ErrorEnvelope?
4345

@@ -218,6 +220,7 @@
218220
changeCurrencyResult: Result<EmptyResponseEnvelope, ErrorEnvelope>? = nil,
219221
changePaymentMethodResult: Result<ChangePaymentMethodEnvelope, ErrorEnvelope>? = nil,
220222
deletePaymentMethodResult: Result<DeletePaymentMethodEnvelope, ErrorEnvelope>? = nil,
223+
triggerCapiEventResult: Result<EmptyResponseEnvelope, ErrorEnvelope>? = nil,
221224
clearUserUnseenActivityResult: Result<ClearUserUnseenActivityEnvelope, ErrorEnvelope>? = nil,
222225
facebookConnectResponse: User? = nil,
223226
facebookConnectError: ErrorEnvelope? = nil,
@@ -335,6 +338,8 @@
335338
self.changePaymentMethodResult = changePaymentMethodResult
336339
self.deletePaymentMethodResult = deletePaymentMethodResult
337340

341+
self.triggerCapiEventResult = triggerCapiEventResult
342+
338343
self.facebookConnectResponse = facebookConnectResponse
339344
self.facebookConnectError = facebookConnectError
340345

@@ -1561,6 +1566,18 @@
15611566
return client.performWithResult(mutation: mutation, result: self.deletePaymentMethodResult)
15621567
}
15631568

1569+
internal func triggerCapiEventInput(input: TriggerCapiEventInput)
1570+
-> SignalProducer<EmptyResponseEnvelope, ErrorEnvelope> {
1571+
guard let client = self.apolloClient else {
1572+
return .empty
1573+
}
1574+
1575+
let mutation = GraphAPI
1576+
.TriggerCapiEventMutation(input: GraphAPI.TriggerCapiEventInput.from(input))
1577+
1578+
return client.performWithResult(mutation: mutation, result: self.triggerCapiEventResult)
1579+
}
1580+
15641581
internal func publish(draft _: UpdateDraft) -> SignalProducer<Update, ErrorEnvelope> {
15651582
if let error = publishUpdateError {
15661583
return SignalProducer(error: error)

0 commit comments

Comments
 (0)