1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
//
// PaymentErrorPresenter.swift
// MullvadVPN
//
// Created by Jon Petersson on 2023-05-30.
// Copyright © 2025 Mullvad VPN AB. All rights reserved.
//
import MullvadREST
import Routing
@MainActor
struct PaymentAlertPresenter {
let alertContext: any Presenting
func showAlertForRefund(completion: (@MainActor @Sendable () -> Void)? = nil) {
let presentation = AlertPresentation(
id: "payment-refund-alert",
title: NSLocalizedString("Refund successful", comment: ""),
message: NSLocalizedString("Your purchase was successfully refunded.", comment: ""),
buttons: [
AlertAction(
title: NSLocalizedString("Got it!", comment: ""),
style: .default,
handler: {
completion?()
}
)
]
)
let presenter = AlertPresenter(context: alertContext)
presenter.showAlert(presentation: presentation, animated: true)
}
func showAlertForError(
_ error: StorePaymentManagerError,
context: REST.CreateApplePaymentResponse.Context,
completion: (@MainActor @Sendable () -> Void)? = nil
) {
let presentation = AlertPresentation(
id: "payment-error-alert",
title: context.errorTitle,
message: error.displayErrorDescription,
buttons: [
AlertAction(
title: NSLocalizedString("Got it!", comment: ""),
style: .default,
handler: {
completion?()
}
)
]
)
let presenter = AlertPresenter(context: alertContext)
presenter.showAlert(presentation: presentation, animated: true)
}
func showAlertForStoreKitError(
_ error: any Error,
context: REST.CreateApplePaymentResponse.Context,
completion: (() -> Void)? = nil
) {
let presentation = AlertPresentation(
id: "payment-error-alert",
title: context.errorTitle,
message: "\(error)",
buttons: [
AlertAction(
title: NSLocalizedString("Got it!", comment: ""),
style: .default,
handler: {
completion?()
}
)
]
)
let presenter = AlertPresenter(context: alertContext)
presenter.showAlert(presentation: presentation, animated: true)
}
func showAlertForResponse(
_ response: REST.CreateApplePaymentResponse,
context: REST.CreateApplePaymentResponse.Context,
completion: (@MainActor @Sendable () -> Void)? = nil
) {
guard case .noTimeAdded = response else {
completion?()
return
}
let presentation = AlertPresentation(
id: "payment-response-alert",
title: response.alertTitle(context: context),
message: response.alertMessage(context: context),
buttons: [
AlertAction(
title: NSLocalizedString("Got it!", comment: ""),
style: .default,
handler: {
completion?()
}
)
]
)
let presenter = AlertPresenter(context: alertContext)
presenter.showAlert(presentation: presentation, animated: true)
}
}
|