|
@@ -625,6 +625,7 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
var onClose: (() -> Void)?
|
|
var onClose: (() -> Void)?
|
|
|
|
|
|
|
|
private var selectedPlan: PaywallPlan = StoreKitCatalog.shared.defaultSelectedPlan()
|
|
private var selectedPlan: PaywallPlan = StoreKitCatalog.shared.defaultSelectedPlan()
|
|
|
|
|
+ private var hasUserSelectedPlan = false
|
|
|
private var planCards: [PaywallPlan: PaywallPlanCard] = [:]
|
|
private var planCards: [PaywallPlan: PaywallPlanCard] = [:]
|
|
|
private let ctaButton = PaywallCTAButton()
|
|
private let ctaButton = PaywallCTAButton()
|
|
|
private let renewalDisclosureLabel = NSTextField(wrappingLabelWithString: "")
|
|
private let renewalDisclosureLabel = NSTextField(wrappingLabelWithString: "")
|
|
@@ -675,7 +676,6 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
},
|
|
},
|
|
|
center.addObserver(forName: .storeStateDidChange, object: nil, queue: .main) { [weak self] _ in
|
|
center.addObserver(forName: .storeStateDidChange, object: nil, queue: .main) { [weak self] _ in
|
|
|
self?.refreshProductDisplay()
|
|
self?.refreshProductDisplay()
|
|
|
- self?.selectTrialEligiblePlanIfAvailable()
|
|
|
|
|
},
|
|
},
|
|
|
center.addObserver(forName: .premiumStatusDidChange, object: nil, queue: .main) { [weak self] _ in
|
|
center.addObserver(forName: .premiumStatusDidChange, object: nil, queue: .main) { [weak self] _ in
|
|
|
self?.refreshProductDisplay()
|
|
self?.refreshProductDisplay()
|
|
@@ -688,6 +688,8 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private func selectTrialEligiblePlanIfAvailable() {
|
|
private func selectTrialEligiblePlanIfAvailable() {
|
|
|
|
|
+ guard !hasUserSelectedPlan else { return }
|
|
|
|
|
+
|
|
|
let store = StoreManager.shared
|
|
let store = StoreManager.shared
|
|
|
let config = paywallConfig
|
|
let config = paywallConfig
|
|
|
guard let eligiblePlan = config.trialEligiblePlan,
|
|
guard let eligiblePlan = config.trialEligiblePlan,
|
|
@@ -697,6 +699,10 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
selectPlan(eligiblePlan)
|
|
selectPlan(eligiblePlan)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ func resetAutomaticPlanSelection() {
|
|
|
|
|
+ hasUserSelectedPlan = false
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private var paywallConfig: PaywallConfig {
|
|
private var paywallConfig: PaywallConfig {
|
|
|
PaywallConfigService.shared.config
|
|
PaywallConfigService.shared.config
|
|
|
}
|
|
}
|
|
@@ -763,6 +769,7 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
config: config,
|
|
config: config,
|
|
|
trial: store.trialDisplay(for: plan)
|
|
trial: store.trialDisplay(for: plan)
|
|
|
)
|
|
)
|
|
|
|
|
+ card.isChosen = plan == selectedPlan
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
ensureValidSelectedPlan(from: availablePlans)
|
|
ensureValidSelectedPlan(from: availablePlans)
|
|
@@ -800,7 +807,10 @@ final class PaywallView: NSView, AppearanceRefreshable {
|
|
|
for plan in plans where planCards[plan] == nil {
|
|
for plan in plans where planCards[plan] == nil {
|
|
|
let card = PaywallPlanCard(plan: plan)
|
|
let card = PaywallPlanCard(plan: plan)
|
|
|
card.isChosen = plan == selectedPlan
|
|
card.isChosen = plan == selectedPlan
|
|
|
- card.onSelect = { [weak self] in self?.selectPlan(plan) }
|
|
|
|
|
|
|
+ card.onSelect = { [weak self] in
|
|
|
|
|
+ self?.hasUserSelectedPlan = true
|
|
|
|
|
+ self?.selectPlan(plan)
|
|
|
|
|
+ }
|
|
|
planCards[plan] = card
|
|
planCards[plan] = card
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1566,6 +1576,7 @@ final class PaywallOverlayView: NSView, AppearanceRefreshable {
|
|
|
}
|
|
}
|
|
|
alphaValue = 1
|
|
alphaValue = 1
|
|
|
acceptsHitTesting = true
|
|
acceptsHitTesting = true
|
|
|
|
|
+ paywallView.resetAutomaticPlanSelection()
|
|
|
paywallView.refreshStoreState()
|
|
paywallView.refreshStoreState()
|
|
|
|
|
|
|
|
Task { @MainActor in
|
|
Task { @MainActor in
|