Эх сурвалжийг харах

Fix paywall products error view collapse constraints.

Deactivate the retry button's vertical constraints while the products error area is collapsed so Auto Layout no longer logs conflicting constraints when opening the paywall.

Co-authored-by: Cursor <cursoragent@cursor.com>
Hussain Afzal 2 долоо хоног өмнө
parent
commit
01b069180f

+ 20 - 2
smart_printer/PaywallView.swift

@@ -442,6 +442,8 @@ private final class PaywallProductsErrorView: NSView, AppearanceRefreshable {
 
 
     private let messageLabel = NSTextField(wrappingLabelWithString: "")
     private let messageLabel = NSTextField(wrappingLabelWithString: "")
     private let retryButton = PaywallFooterLink(title: "")
     private let retryButton = PaywallFooterLink(title: "")
+    private var retryTopConstraint: NSLayoutConstraint!
+    private var retryBottomConstraint: NSLayoutConstraint!
 
 
     init() {
     init() {
         super.init(frame: .zero)
         super.init(frame: .zero)
@@ -462,14 +464,17 @@ private final class PaywallProductsErrorView: NSView, AppearanceRefreshable {
         addSubview(messageLabel)
         addSubview(messageLabel)
         addSubview(retryButton)
         addSubview(retryButton)
 
 
+        retryTopConstraint = retryButton.topAnchor.constraint(equalTo: messageLabel.bottomAnchor, constant: 8)
+        retryBottomConstraint = retryButton.bottomAnchor.constraint(equalTo: bottomAnchor)
+
         NSLayoutConstraint.activate([
         NSLayoutConstraint.activate([
             messageLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
             messageLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
             messageLabel.trailingAnchor.constraint(equalTo: trailingAnchor),
             messageLabel.trailingAnchor.constraint(equalTo: trailingAnchor),
             messageLabel.topAnchor.constraint(equalTo: topAnchor),
             messageLabel.topAnchor.constraint(equalTo: topAnchor),
 
 
             retryButton.centerXAnchor.constraint(equalTo: centerXAnchor),
             retryButton.centerXAnchor.constraint(equalTo: centerXAnchor),
-            retryButton.topAnchor.constraint(equalTo: messageLabel.bottomAnchor, constant: 8),
-            retryButton.bottomAnchor.constraint(equalTo: bottomAnchor),
+            retryTopConstraint,
+            retryBottomConstraint,
         ])
         ])
     }
     }
 
 
@@ -480,10 +485,22 @@ private final class PaywallProductsErrorView: NSView, AppearanceRefreshable {
         let messages = PaywallConfigService.shared.config.messages
         let messages = PaywallConfigService.shared.config.messages
         messageLabel.stringValue = message
         messageLabel.stringValue = message
         retryButton.isHidden = false
         retryButton.isHidden = false
+        setCollapsed(false)
         retryButton.isEnabled = !isRetrying
         retryButton.isEnabled = !isRetrying
         retryButton.updateTitle(isRetrying ? messages.retrying : messages.retry)
         retryButton.updateTitle(isRetrying ? messages.retrying : messages.retry)
     }
     }
 
 
+    func setCollapsed(_ collapsed: Bool) {
+        if collapsed {
+            NSLayoutConstraint.deactivate([retryTopConstraint, retryBottomConstraint])
+            retryButton.isHidden = true
+            messageLabel.stringValue = ""
+            return
+        }
+
+        NSLayoutConstraint.activate([retryTopConstraint, retryBottomConstraint])
+    }
+
     func refreshAppearance() {
     func refreshAppearance() {
         messageLabel.textColor = AppTheme.textSecondary
         messageLabel.textColor = AppTheme.textSecondary
         retryButton.refreshAppearance()
         retryButton.refreshAppearance()
@@ -867,6 +884,7 @@ final class PaywallView: NSView, AppearanceRefreshable {
         let isRetrying = hasLoadFailure && store.isLoadingProducts
         let isRetrying = hasLoadFailure && store.isLoadingProducts
 
 
         productsErrorView.isHidden = !hasLoadFailure
         productsErrorView.isHidden = !hasLoadFailure
+        productsErrorView.setCollapsed(!hasLoadFailure)
         plansStack.isHidden = hasLoadFailure || store.availablePlans.isEmpty
         plansStack.isHidden = hasLoadFailure || store.availablePlans.isEmpty
         let visiblePlanCount = hasLoadFailure ? 0 : store.availablePlans.count
         let visiblePlanCount = hasLoadFailure ? 0 : store.availablePlans.count
         refreshPlansLayout(planCount: visiblePlanCount)
         refreshPlansLayout(planCount: visiblePlanCount)