Răsfoiți Sursa

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 săptămâni în urmă
părinte
comite
01b069180f
1 a modificat fișierele cu 20 adăugiri și 2 ștergeri
  1. 20 2
      smart_printer/PaywallView.swift

+ 20 - 2
smart_printer/PaywallView.swift

@@ -442,6 +442,8 @@ private final class PaywallProductsErrorView: NSView, AppearanceRefreshable {
 
     private let messageLabel = NSTextField(wrappingLabelWithString: "")
     private let retryButton = PaywallFooterLink(title: "")
+    private var retryTopConstraint: NSLayoutConstraint!
+    private var retryBottomConstraint: NSLayoutConstraint!
 
     init() {
         super.init(frame: .zero)
@@ -462,14 +464,17 @@ private final class PaywallProductsErrorView: NSView, AppearanceRefreshable {
         addSubview(messageLabel)
         addSubview(retryButton)
 
+        retryTopConstraint = retryButton.topAnchor.constraint(equalTo: messageLabel.bottomAnchor, constant: 8)
+        retryBottomConstraint = retryButton.bottomAnchor.constraint(equalTo: bottomAnchor)
+
         NSLayoutConstraint.activate([
             messageLabel.leadingAnchor.constraint(equalTo: leadingAnchor),
             messageLabel.trailingAnchor.constraint(equalTo: trailingAnchor),
             messageLabel.topAnchor.constraint(equalTo: topAnchor),
 
             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
         messageLabel.stringValue = message
         retryButton.isHidden = false
+        setCollapsed(false)
         retryButton.isEnabled = !isRetrying
         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() {
         messageLabel.textColor = AppTheme.textSecondary
         retryButton.refreshAppearance()
@@ -867,6 +884,7 @@ final class PaywallView: NSView, AppearanceRefreshable {
         let isRetrying = hasLoadFailure && store.isLoadingProducts
 
         productsErrorView.isHidden = !hasLoadFailure
+        productsErrorView.setCollapsed(!hasLoadFailure)
         plansStack.isHidden = hasLoadFailure || store.availablePlans.isEmpty
         let visiblePlanCount = hasLoadFailure ? 0 : store.availablePlans.count
         refreshPlansLayout(planCount: visiblePlanCount)