From de2e1edb0b7ee35ed81c3de972fd9a3c4d062d76 Mon Sep 17 00:00:00 2001 From: Josh Holtz Date: Tue, 22 Aug 2023 17:02:05 -0500 Subject: [PATCH] `Paywalls`: rename card to footer (#3049) Rename "card" to "footer" to because that is how we expect developers to use the current implementation of the non-fullscreen modes as a footer to their custom paywalls. - Renamed `card` to `footer` - Renamed `condensedCard` to `condensedFooter` --------- Co-authored-by: NachoSoto --- .../Data/PaywallViewMode+Extensions.swift | 14 +++++----- RevenueCatUI/Helpers/PreviewHelpers.swift | 4 +-- ...ifier.swift => FooterHidingModifier.swift} | 16 ++++++------ RevenueCatUI/PaywallView.swift | 4 +-- RevenueCatUI/Templates/Template2View.swift | 10 +++---- RevenueCatUI/Templates/Template4View.swift | 16 ++++++------ RevenueCatUI/Templates/TemplateViewType.swift | 2 +- RevenueCatUI/Views/PurchaseButton.swift | 8 +++--- .../Views/TemplateBackgroundImageView.swift | 2 +- Sources/Paywalls/PaywallViewMode.swift | 10 +++---- .../SwiftAPITester/PaywallAPI.swift | 4 +-- .../RevenueCatUITests/BaseSnapshotTest.swift | 2 +- .../Templates/OtherPaywallViewTests.swift | 12 ++++----- .../Templates/Template1ViewTests.swift | 12 ++++----- .../Templates/Template2ViewTests.swift | 12 ++++----- .../Templates/Template3ViewTests.swift | 12 ++++----- .../Templates/Template4ViewTests.swift | 12 ++++----- .../SimpleApp/Views/CustomPaywall.swift | 4 +-- .../SimpleApp/Views/SamplePaywallsList.swift | 26 +++++++++---------- 19 files changed, 91 insertions(+), 91 deletions(-) rename RevenueCatUI/Modifiers/{CardHidingModifier.swift => FooterHidingModifier.swift} (82%) diff --git a/RevenueCatUI/Data/PaywallViewMode+Extensions.swift b/RevenueCatUI/Data/PaywallViewMode+Extensions.swift index c71dbd260b..25e106ff1d 100644 --- a/RevenueCatUI/Data/PaywallViewMode+Extensions.swift +++ b/RevenueCatUI/Data/PaywallViewMode+Extensions.swift @@ -12,37 +12,37 @@ extension PaywallViewMode { var displayAllPlansByDefault: Bool { switch self { case .fullScreen: return true - case .card: return true - case .condensedCard: return false + case .footer: return true + case .condensedFooter: return false } } var displayAllPlansButton: Bool { switch self { case .fullScreen: return false - case .card: return false - case .condensedCard: return true + case .footer: return false + case .condensedFooter: return true } } var shouldDisplayIcon: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } var shouldDisplayText: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } var shouldDisplayFeatures: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } diff --git a/RevenueCatUI/Helpers/PreviewHelpers.swift b/RevenueCatUI/Helpers/PreviewHelpers.swift index 6b21fdc358..9128b2fd65 100644 --- a/RevenueCatUI/Helpers/PreviewHelpers.swift +++ b/RevenueCatUI/Helpers/PreviewHelpers.swift @@ -112,8 +112,8 @@ private extension PaywallViewMode { var layout: PreviewLayout { switch self { case .fullScreen: return .device - case .card: return .fixed(width: 400, height: 280) - case .condensedCard: return .fixed(width: 400, height: 150) + case .footer: return .fixed(width: 400, height: 280) + case .condensedFooter: return .fixed(width: 400, height: 150) } } diff --git a/RevenueCatUI/Modifiers/CardHidingModifier.swift b/RevenueCatUI/Modifiers/FooterHidingModifier.swift similarity index 82% rename from RevenueCatUI/Modifiers/CardHidingModifier.swift rename to RevenueCatUI/Modifiers/FooterHidingModifier.swift index 764159721e..514acd6669 100644 --- a/RevenueCatUI/Modifiers/CardHidingModifier.swift +++ b/RevenueCatUI/Modifiers/FooterHidingModifier.swift @@ -1,5 +1,5 @@ // -// CardHidingModifier.swift +// FooterHidingModifier.swift // // // Created by Nacho Soto on 8/9/23. @@ -11,20 +11,20 @@ import SwiftUI @available(iOS 15.0, macOS 12.0, tvOS 15.0, *) extension View { - func hideCardContent( + func hideFooterContent( _ configuration: TemplateViewConfiguration, hide: Bool, offset: CGFloat ) -> some View { - return self.modifier(CardHidingModifier(configuration: configuration, - hide: hide, - offset: offset)) + return self.modifier(FooterHidingModifier(configuration: configuration, + hide: hide, + offset: offset)) } } @available(iOS 15.0, macOS 12.0, tvOS 15.0, *) -private struct CardHidingModifier: ViewModifier { +private struct FooterHidingModifier: ViewModifier { @State private var height: CGFloat = 10 @@ -35,12 +35,12 @@ private struct CardHidingModifier: ViewModifier { func body(content: Content) -> some View { switch self.configuration.mode { - case .fullScreen, .card: + case .fullScreen, .footer: // These modes don't support hiding the content content .padding(.vertical) - case .condensedCard: + case .condensedFooter: // "Hidden view" so it doesn't contribute to size calculation Rectangle() .frame(height: VersionDetector.iOS15 ? 1 : 0) // Note: height "0" breaks iOS 15 diff --git a/RevenueCatUI/PaywallView.swift b/RevenueCatUI/PaywallView.swift index 0fba7a9be9..e155b7df02 100644 --- a/RevenueCatUI/PaywallView.swift +++ b/RevenueCatUI/PaywallView.swift @@ -206,7 +206,7 @@ struct LoadedOfferingPaywallView: View { case .fullScreen: view - case .card, .condensedCard: + case .footer, .condensedFooter: view .fixedSize(horizontal: false, vertical: true) .edgesIgnoringSafeArea(.bottom) @@ -264,7 +264,7 @@ private extension PaywallViewMode { var layout: PreviewLayout { switch self { case .fullScreen: return .device - case .card, .condensedCard: return .sizeThatFits + case .footer, .condensedFooter: return .sizeThatFits } } diff --git a/RevenueCatUI/Templates/Template2View.swift b/RevenueCatUI/Templates/Template2View.swift index e40e8b59bd..4a6936ecfc 100644 --- a/RevenueCatUI/Templates/Template2View.swift +++ b/RevenueCatUI/Templates/Template2View.swift @@ -89,9 +89,9 @@ struct Template2View: TemplateViewType { } else { self.packages .onSizeChange(.vertical) { if $0 > 0 { self.containerHeight = $0 } } - .hideCardContent(self.configuration, - hide: !self.displayingAllPlans, - offset: self.containerHeight) + .hideFooterContent(self.configuration, + hide: !self.displayingAllPlans, + offset: self.containerHeight) } } .frame(maxHeight: .infinity) @@ -266,14 +266,14 @@ private extension PaywallViewMode { var shouldDisplayPackages: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } var shouldDisplayInlineOfferDetails: Bool { switch self { case .fullScreen: return false - case .card, .condensedCard: return true + case .footer, .condensedFooter: return true } } diff --git a/RevenueCatUI/Templates/Template4View.swift b/RevenueCatUI/Templates/Template4View.swift index e67c16050b..912bb1bdcd 100644 --- a/RevenueCatUI/Templates/Template4View.swift +++ b/RevenueCatUI/Templates/Template4View.swift @@ -44,7 +44,7 @@ struct Template4View: TemplateViewType { ZStack(alignment: .bottom) { TemplateBackgroundImageView(configuration: self.configuration) - self.cardContent + self.footerContent .edgesIgnoringSafeArea(.bottom) .frame(maxWidth: .infinity, alignment: .bottom) .background(self.configuration.colors.backgroundColor) @@ -55,13 +55,13 @@ struct Template4View: TemplateViewType { #endif } - case .card, .condensedCard: - self.cardContent + case .footer, .condensedFooter: + self.footerContent } } @ViewBuilder - var cardContent: some View { + var footerContent: some View { VStack(spacing: Self.verticalPadding) { if self.configuration.mode.shouldDisplayText { Text(.init(self.selectedPackage.localization.title)) @@ -75,9 +75,9 @@ struct Template4View: TemplateViewType { self.packagesScrollView } else { self.packagesScrollView - .hideCardContent(self.configuration, - hide: !self.displayingAllPlans, - offset: self.packageContentHeight) + .hideFooterContent(self.configuration, + hide: !self.displayingAllPlans, + offset: self.packageContentHeight) } IntroEligibilityStateView( @@ -342,7 +342,7 @@ private extension PaywallViewMode { var shouldDisplayPackages: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } diff --git a/RevenueCatUI/Templates/TemplateViewType.swift b/RevenueCatUI/Templates/TemplateViewType.swift index fc02ef2e4c..f1b1c85fc1 100644 --- a/RevenueCatUI/Templates/TemplateViewType.swift +++ b/RevenueCatUI/Templates/TemplateViewType.swift @@ -133,7 +133,7 @@ extension TemplateViewConfiguration { switch self.mode { case .fullScreen: self.backgroundContent - case .card, .condensedCard: + case .footer, .condensedFooter: self.backgroundContent #if canImport(UIKit) .roundedCorner( diff --git a/RevenueCatUI/Views/PurchaseButton.swift b/RevenueCatUI/Views/PurchaseButton.swift index 6ba74f1dee..776fd518a2 100644 --- a/RevenueCatUI/Views/PurchaseButton.swift +++ b/RevenueCatUI/Views/PurchaseButton.swift @@ -99,26 +99,26 @@ private extension PaywallViewMode { var buttonFont: Font.TextStyle { switch self { - case .fullScreen, .card, .condensedCard: return .title3 + case .fullScreen, .footer, .condensedFooter: return .title3 } } var fullWidthButton: Bool { switch self { - case .fullScreen, .card, .condensedCard: return true + case .fullScreen, .footer, .condensedFooter: return true } } @available(tvOS, unavailable) var buttonSize: ControlSize { switch self { - case .fullScreen, .card, .condensedCard: return .large + case .fullScreen, .footer, .condensedFooter: return .large } } var buttonBorderShape: ButtonBorderShape { switch self { - case .fullScreen, .card, .condensedCard: + case .fullScreen, .footer, .condensedFooter: #if os(macOS) || os(tvOS) return .roundedRectangle #else diff --git a/RevenueCatUI/Views/TemplateBackgroundImageView.swift b/RevenueCatUI/Views/TemplateBackgroundImageView.swift index da39e91272..076353669a 100644 --- a/RevenueCatUI/Views/TemplateBackgroundImageView.swift +++ b/RevenueCatUI/Views/TemplateBackgroundImageView.swift @@ -41,7 +41,7 @@ private extension PaywallViewMode { var shouldDisplayBackground: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } diff --git a/Sources/Paywalls/PaywallViewMode.swift b/Sources/Paywalls/PaywallViewMode.swift index 2ac9b9b627..9716088277 100644 --- a/Sources/Paywalls/PaywallViewMode.swift +++ b/Sources/Paywalls/PaywallViewMode.swift @@ -21,11 +21,11 @@ public enum PaywallViewMode { /// Paywall can be displayed as an overlay on top of your own content. /// Multi-package templates will display the package selection. - case card + case footer /// Paywall can be displayed as an overlay on top of your own content. /// Multi-package templates will include a button to make the package selection visible. - case condensedCard + case condensedFooter /// The default ``PaywallViewMode``: ``PaywallViewMode/fullScreen``. public static let `default`: Self = .fullScreen @@ -38,7 +38,7 @@ extension PaywallViewMode { public var isFullScreen: Bool { switch self { case .fullScreen: return true - case .card, .condensedCard: return false + case .footer, .condensedFooter: return false } } @@ -49,8 +49,8 @@ extension PaywallViewMode { var identifier: String { switch self { case .fullScreen: return "full_screen" - case .card: return "card" - case .condensedCard: return "condensed_card" + case .footer: return "footer" + case .condensedFooter: return "condensed_footer" } } diff --git a/Tests/APITesters/SwiftAPITester/SwiftAPITester/PaywallAPI.swift b/Tests/APITesters/SwiftAPITester/SwiftAPITester/PaywallAPI.swift index 8784625972..ce2dad1320 100644 --- a/Tests/APITesters/SwiftAPITester/SwiftAPITester/PaywallAPI.swift +++ b/Tests/APITesters/SwiftAPITester/SwiftAPITester/PaywallAPI.swift @@ -147,9 +147,9 @@ func checkPaywallViewMode(_ mode: PaywallViewMode) { switch mode { case .fullScreen: break - case .card: + case .footer: break - case .condensedCard: + case .condensedFooter: break @unknown default: break diff --git a/Tests/RevenueCatUITests/BaseSnapshotTest.swift b/Tests/RevenueCatUITests/BaseSnapshotTest.swift index 2c6d89c42d..521228f7ea 100644 --- a/Tests/RevenueCatUITests/BaseSnapshotTest.swift +++ b/Tests/RevenueCatUITests/BaseSnapshotTest.swift @@ -31,7 +31,7 @@ extension BaseSnapshotTest { static let fonts: PaywallFontProvider = CustomPaywallFontProvider(fontName: "Papyrus") static let fullScreenSize: CGSize = .init(width: 460, height: 950) - static let cardSize: CGSize = .init(width: 460, height: 460) + static let footerSize: CGSize = .init(width: 460, height: 460) } diff --git a/Tests/RevenueCatUITests/Templates/OtherPaywallViewTests.swift b/Tests/RevenueCatUITests/Templates/OtherPaywallViewTests.swift index 2ed24659da..3012d66a9f 100644 --- a/Tests/RevenueCatUITests/Templates/OtherPaywallViewTests.swift +++ b/Tests/RevenueCatUITests/Templates/OtherPaywallViewTests.swift @@ -37,14 +37,14 @@ class OtherPaywallViewTests: BaseSnapshotTest { .snapshot(size: Self.fullScreenSize) } - func testLoadingCardPaywallView() { - LoadingPaywallView(mode: .card) - .snapshot(size: Self.cardSize) + func testLoadingFooterPaywallView() { + LoadingPaywallView(mode: .footer) + .snapshot(size: Self.footerSize) } - func testLoadingCondensedCardPaywallView() { - LoadingPaywallView(mode: .condensedCard) - .snapshot(size: Self.cardSize) + func testLoadingCondensedFooterPaywallView() { + LoadingPaywallView(mode: .condensedFooter) + .snapshot(size: Self.footerSize) } } diff --git a/Tests/RevenueCatUITests/Templates/Template1ViewTests.swift b/Tests/RevenueCatUITests/Templates/Template1ViewTests.swift index 3b760235f3..42cf20ed1f 100644 --- a/Tests/RevenueCatUITests/Templates/Template1ViewTests.swift +++ b/Tests/RevenueCatUITests/Templates/Template1ViewTests.swift @@ -24,20 +24,20 @@ class Template1ViewTests: BaseSnapshotTest { .snapshot(size: Self.fullScreenSize) } - func testCardPaywall() { + func testFooterPaywall() { PaywallView(offering: Self.offeringWithNoIntroOffer, - mode: .card, + mode: .footer, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } - func testCondensedCardPaywall() { + func testCondensedFooterPaywall() { PaywallView(offering: Self.offeringWithNoIntroOffer, - mode: .condensedCard, + mode: .condensedFooter, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } func testSamplePaywallWithIntroOffer() { diff --git a/Tests/RevenueCatUITests/Templates/Template2ViewTests.swift b/Tests/RevenueCatUITests/Templates/Template2ViewTests.swift index b394ed6f91..5527c0a711 100644 --- a/Tests/RevenueCatUITests/Templates/Template2ViewTests.swift +++ b/Tests/RevenueCatUITests/Templates/Template2ViewTests.swift @@ -23,20 +23,20 @@ class Template2ViewTests: BaseSnapshotTest { .snapshot(size: Self.fullScreenSize) } - func testCardPaywall() { + func testFooterPaywall() { PaywallView(offering: Self.offering.withLocalImages, - mode: .card, + mode: .footer, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } - func testCondensedCardPaywall() { + func testCondensedFooterPaywall() { PaywallView(offering: Self.offering.withLocalImages, - mode: .condensedCard, + mode: .condensedFooter, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } func testPurchasingState() { diff --git a/Tests/RevenueCatUITests/Templates/Template3ViewTests.swift b/Tests/RevenueCatUITests/Templates/Template3ViewTests.swift index bc15581abc..ce0fbfadd8 100644 --- a/Tests/RevenueCatUITests/Templates/Template3ViewTests.swift +++ b/Tests/RevenueCatUITests/Templates/Template3ViewTests.swift @@ -31,20 +31,20 @@ class Template3ViewTests: BaseSnapshotTest { .snapshot(size: Self.fullScreenSize) } - func testCardPaywall() { + func testFooterPaywall() { PaywallView(offering: Self.offering.withLocalImages, - mode: .card, + mode: .footer, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } - func testCondensedCardPaywall() { + func testCondensedFooterPaywall() { PaywallView(offering: Self.offering.withLocalImages, - mode: .condensedCard, + mode: .condensedFooter, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } private static let offering = TestData.offeringWithSinglePackageFeaturesPaywall diff --git a/Tests/RevenueCatUITests/Templates/Template4ViewTests.swift b/Tests/RevenueCatUITests/Templates/Template4ViewTests.swift index 93ba4925e5..5cc78ec701 100644 --- a/Tests/RevenueCatUITests/Templates/Template4ViewTests.swift +++ b/Tests/RevenueCatUITests/Templates/Template4ViewTests.swift @@ -39,20 +39,20 @@ class Template4ViewTests: BaseSnapshotTest { .snapshot(size: Self.fullScreenSize) } - func testCardPaywall() { + func testFooterPaywall() { PaywallView(offering: Self.offering.withLocalImages, - mode: .card, + mode: .footer, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } - func testCondensedCardPaywall() { + func testCondensedFooterPaywall() { PaywallView(offering: Self.offering.withLocalImages, - mode: .condensedCard, + mode: .condensedFooter, introEligibility: Self.eligibleChecker, purchaseHandler: Self.purchaseHandler) - .snapshot(size: Self.cardSize) + .snapshot(size: Self.footerSize) } private static let offering = TestData.offeringWithMultiPackageHorizontalPaywall diff --git a/Tests/TestingApps/SimpleApp/SimpleApp/Views/CustomPaywall.swift b/Tests/TestingApps/SimpleApp/SimpleApp/Views/CustomPaywall.swift index 2162c8fd36..ad1bce09a8 100644 --- a/Tests/TestingApps/SimpleApp/SimpleApp/Views/CustomPaywall.swift +++ b/Tests/TestingApps/SimpleApp/SimpleApp/Views/CustomPaywall.swift @@ -91,8 +91,8 @@ struct CustomPaywall_Previews: PreviewProvider { } private static let modes: [PaywallViewMode] = [ - .card, - .condensedCard + .footer, + .condensedFooter ] } diff --git a/Tests/TestingApps/SimpleApp/SimpleApp/Views/SamplePaywallsList.swift b/Tests/TestingApps/SimpleApp/SimpleApp/Views/SamplePaywallsList.swift index 39797ad99b..612c73af2d 100644 --- a/Tests/TestingApps/SimpleApp/SimpleApp/Views/SamplePaywallsList.swift +++ b/Tests/TestingApps/SimpleApp/SimpleApp/Views/SamplePaywallsList.swift @@ -30,7 +30,7 @@ struct SamplePaywallsList: View { introEligibility: Self.introEligibility, purchaseHandler: .default()) - case .card, .condensedCard: + case .footer, .condensedFooter: CustomPaywall(offering: Self.loader.offering(for: template), mode: mode, introEligibility: Self.introEligibility, @@ -83,17 +83,17 @@ struct SamplePaywallsList: View { Section("Other") { Button { - self.display = .customPaywall(.card) + self.display = .customPaywall(.footer) } label: { - TemplateLabel(name: "Custom + card", - icon: PaywallViewMode.card.icon) + TemplateLabel(name: "Custom + footer", + icon: PaywallViewMode.footer.icon) } Button { - self.display = .customPaywall(.condensedCard) + self.display = .customPaywall(.condensedFooter) } label: { - TemplateLabel(name: "Custom + condensed card", - icon: PaywallViewMode.condensedCard.icon) + TemplateLabel(name: "Custom + condensed footer", + icon: PaywallViewMode.condensedFooter.icon) } Button { @@ -204,8 +204,8 @@ private extension PaywallViewMode { var icon: String { switch self { case .fullScreen: return "iphone" - case .card: return "lanyardcard" - case .condensedCard: return "ruler" + case .footer: return "lanyardcard" + case .condensedFooter: return "ruler" } } @@ -213,10 +213,10 @@ private extension PaywallViewMode { switch self { case .fullScreen: return "Fullscreen" - case .card: - return "Card" - case .condensedCard: - return "Condensed Card" + case .footer: + return "Footer" + case .condensedFooter: + return "Condensed Footer" } }