-
Notifications
You must be signed in to change notification settings - Fork 338
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Models the Action for the ButtonComponent #4353
Merged
Merged
Changes from 15 commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
8324986
Adds scaffolding for the ButtonComponent.
JayShortway 4200f5e
ButtonComponent uses the correct type.
JayShortway 13c48c6
Adds an empty preview
JayShortway 95fe157
Buttons contain text!
JayShortway 0bfe862
First pass of the button Action enum, and some click handling.
JayShortway 857fad6
Removes EmptyView.
JayShortway 62b33f7
Buttons are stacks now
JayShortway 310bee9
Merge branch 'main' into paywalls-components/button-component-1
JayShortway c388b8b
Merge branch 'paywalls-components/button-component-1' into paywalls-c…
JayShortway a5e4fa9
removes deeplink method
JayShortway bd8ae50
Removes oopsie from bad merge
JayShortway b29d263
Uses swiftlint:disable:next
JayShortway 64a27d6
Adds deepLink URLMethod.
JayShortway 93316d7
Adds privacyPolicy and terms cases to Destination enum.
JayShortway 5aacf0d
Changes url properties to urlLid.
JayShortway 26fbb79
Merge branch 'main' into paywalls-components/button-component-1
JayShortway 0e93154
Merge branch 'paywalls-components/button-component-1' into paywalls-c…
JayShortway 393590a
Makes ButtonComponentViewModel public for PaywallsTester
JayShortway c0f4f73
Merge branch 'main' into paywalls-components/button-component-1
JayShortway 4f849b0
Merge branch 'paywalls-components/button-component-1' into paywalls-c…
JayShortway 0d0d15c
Merge branch 'main' into paywalls-components/button-component-1
JayShortway dd0f48c
Merge branch 'paywalls-components/button-component-1' into paywalls-c…
JayShortway de4d515
Merge branch 'main' into paywalls-components/button-component-1
JayShortway f38e654
Merge branch 'paywalls-components/button-component-1' into paywalls-c…
JayShortway c2774d7
Merge branch 'main' into paywalls-components/button-component-1
JayShortway 5f28f27
Merge branch 'paywalls-components/button-component-1' into paywalls-c…
JayShortway eafda3f
Merge branch 'main' into paywalls-components/button-component-2
JayShortway File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
77 changes: 77 additions & 0 deletions
77
RevenueCatUI/Templates/Components/Button/ButtonComponentView.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// | ||
// Copyright RevenueCat Inc. All Rights Reserved. | ||
// | ||
// Licensed under the MIT License (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// https://opensource.org/licenses/MIT | ||
// | ||
// ButtonComponentView.swift | ||
// | ||
// Created by Jay Shortway on 02/10/2024. | ||
|
||
import Foundation | ||
import RevenueCat | ||
import SwiftUI | ||
|
||
#if PAYWALL_COMPONENTS | ||
|
||
@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) | ||
struct ButtonComponentView: View { | ||
|
||
private let viewModel: ButtonComponentViewModel | ||
|
||
internal init(viewModel: ButtonComponentViewModel) { | ||
self.viewModel = viewModel | ||
} | ||
|
||
var body: some View { | ||
Button( | ||
action: { viewModel.onClick() }, | ||
label: { StackComponentView(viewModel: viewModel.stackViewModel) } | ||
) | ||
} | ||
|
||
} | ||
|
||
#if DEBUG | ||
|
||
@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) | ||
struct ButtonComponentView_Previews: PreviewProvider { | ||
|
||
static var previews: some View { | ||
VStack { | ||
ButtonComponentView( | ||
// swiftlint:disable:next force_try | ||
viewModel: try! .init( | ||
component: .init( | ||
action: .navigateBack, | ||
stack: .init( | ||
components: [ | ||
PaywallComponent.text( | ||
PaywallComponent.TextComponent( | ||
textLid: "buttonText", | ||
color: .init(light: "#000000") | ||
) | ||
) | ||
], | ||
backgroundColor: nil | ||
) | ||
), | ||
locale: Locale(identifier: "en_US"), | ||
localizedStrings: [ | ||
"buttonText": PaywallComponentsData.LocalizationData.string("Do something") | ||
], | ||
offering: Offering(identifier: "", serverDescription: "", availablePackages: []) | ||
) | ||
) | ||
} | ||
.previewLayout(.fixed(width: 400, height: 400)) | ||
.previewDisplayName("Default") | ||
} | ||
} | ||
|
||
#endif | ||
|
||
#endif |
47 changes: 47 additions & 0 deletions
47
RevenueCatUI/Templates/Components/Button/ButtonComponentViewModel.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// | ||
// Copyright RevenueCat Inc. All Rights Reserved. | ||
// | ||
// Licensed under the MIT License (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// https://opensource.org/licenses/MIT | ||
// | ||
// ButtonComponentViewModel.swift | ||
// | ||
// Created by Jay Shortway on 02/10/2024. | ||
|
||
import Foundation | ||
import RevenueCat | ||
|
||
#if PAYWALL_COMPONENTS | ||
|
||
@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *) | ||
class ButtonComponentViewModel { | ||
|
||
private let component: PaywallComponent.ButtonComponent | ||
let stackViewModel: StackComponentViewModel | ||
|
||
init( | ||
component: PaywallComponent.ButtonComponent, | ||
locale: Locale, | ||
localizedStrings: PaywallComponent.LocalizationDictionary, | ||
offering: Offering | ||
) throws { | ||
self.component = component | ||
self.stackViewModel = try StackComponentViewModel( | ||
locale: locale, | ||
component: component.stack, | ||
localizedStrings: localizedStrings, | ||
offering: offering | ||
) | ||
} | ||
|
||
func onClick() { | ||
// swiftlint:disable:next todo | ||
// TODO Handle the configured Action. | ||
} | ||
|
||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// | ||
// Copyright RevenueCat Inc. All Rights Reserved. | ||
// | ||
// Licensed under the MIT License (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// https://opensource.org/licenses/MIT | ||
// | ||
// PaywallButtonComponent.swift | ||
// | ||
// Created by Jay Shortway on 02/10/2024. | ||
// | ||
// swiftlint:disable missing_docs | ||
|
||
import Foundation | ||
|
||
#if PAYWALL_COMPONENTS | ||
|
||
public extension PaywallComponent { | ||
|
||
struct ButtonComponent: PaywallComponentBase { | ||
|
||
// swiftlint:disable:next nesting | ||
public enum Action: Codable, Sendable, Hashable, Equatable { | ||
case restorePurchases | ||
case navigateTo(destination: Destination) | ||
case navigateBack | ||
} | ||
|
||
// swiftlint:disable:next nesting | ||
public enum Destination: Codable, Sendable, Hashable, Equatable { | ||
case customerCenter | ||
case URL(urlLid: String, method: URLMethod) | ||
case privacyPolicy(urlLid: String, method: URLMethod) | ||
case terms(urlLid: String, method: URLMethod) | ||
JayShortway marked this conversation as resolved.
Show resolved
Hide resolved
JayShortway marked this conversation as resolved.
Show resolved
Hide resolved
|
||
} | ||
|
||
// swiftlint:disable:next nesting | ||
public enum URLMethod: Codable, Sendable, Hashable, Equatable { | ||
case inAppBrowser | ||
case externalBrowser | ||
case deepLink | ||
} | ||
|
||
let type: ComponentType | ||
public let action: Action | ||
public let stack: PaywallComponent.StackComponent | ||
|
||
public init( | ||
action: Action, | ||
stack: PaywallComponent.StackComponent | ||
) { | ||
self.type = .button | ||
self.action = action | ||
self.stack = stack | ||
} | ||
|
||
} | ||
|
||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mentioned this in a PR further down the chain but I would probably name this to
performAction()
since it could be a click or a tap 😇 Just a nit of mine 😅There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh yes, great point. I'll rename it in the other PR, since this function is moved in that PR as well.