Przeglądaj źródła

Add a paywall close button for premium users so they can dismiss the screen after opening it from Manage Subscription.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 miesiąc temu
rodzic
commit
6f908fd9f2
1 zmienionych plików z 33 dodań i 0 usunięć
  1. 33 0
      Reddit App/Views/PaywallView.swift

+ 33 - 0
Reddit App/Views/PaywallView.swift

@@ -45,6 +45,10 @@ struct PaywallView: View {
                     ProgressView()
                         .controlSize(.large)
                 }
+
+                if isPremium {
+                    closeButton(metrics: metrics)
+                }
             }
         }
         .frame(maxWidth: .infinity, maxHeight: .infinity)
@@ -67,6 +71,33 @@ struct PaywallView: View {
         }
     }
 
+    private func closeButton(metrics: PaywallLayoutMetrics) -> some View {
+        VStack {
+            HStack {
+                Spacer()
+                Button(action: onDismiss) {
+                    Image(systemName: "xmark")
+                        .font(.system(size: metrics.closeButtonSize, weight: .medium))
+                        .foregroundStyle(AppTheme.textSecondary)
+                        .frame(width: metrics.closeButtonHitArea, height: metrics.closeButtonHitArea)
+                        .background(
+                            Circle()
+                                .fill(AppTheme.cardBackground)
+                                .overlay(
+                                    Circle()
+                                        .stroke(AppTheme.cardBorder, lineWidth: 1)
+                                )
+                        )
+                }
+                .buttonStyle(.plain)
+                .help("Close")
+            }
+            Spacer()
+        }
+        .padding(.horizontal, metrics.horizontalInset)
+        .padding(.top, metrics.topInset * 0.45)
+    }
+
     private func header(metrics: PaywallLayoutMetrics) -> some View {
         VStack(spacing: metrics.headerSpacing) {
             Text(PaywallContent.title)
@@ -243,6 +274,8 @@ private struct PaywallLayoutMetrics {
     var cardPadding: CGFloat { size.width * 0.014 }
     var cornerRadius: CGFloat { clamp(size.height * 0.014, min: 8, max: 12) }
     var ctaVerticalPadding: CGFloat { size.height * 0.022 }
+    var closeButtonSize: CGFloat { clamp(size.height * 0.016, min: 10, max: 14) }
+    var closeButtonHitArea: CGFloat { clamp(size.height * 0.038, min: 28, max: 36) }
 
     var featureColumns: [GridItem] {
         [