From 328e03f48bf3a92e76582e4baccbb5e4bdac4446 Mon Sep 17 00:00:00 2001 From: Matthew Mathias Date: Wed, 13 Apr 2022 16:26:34 -0700 Subject: [PATCH 1/4] Add defaults for easier button instantiation --- GoogleSignInSwift/Sources/GoogleSignInButton.swift | 6 ++++-- .../Sources/GoogleSignInButtonViewModel.swift | 10 ++++++---- .../DaysUntilBirthday/Shared/Views/SignInView.swift | 9 +-------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/GoogleSignInSwift/Sources/GoogleSignInButton.swift b/GoogleSignInSwift/Sources/GoogleSignInButton.swift index 76e7e570..5166eb74 100644 --- a/GoogleSignInSwift/Sources/GoogleSignInButton.swift +++ b/GoogleSignInSwift/Sources/GoogleSignInButton.swift @@ -28,10 +28,12 @@ public struct GoogleSignInButton: View { /// Creates an instance of the Google Sign-In button for use in SwiftUI /// - parameter viewModel: An instance of `GoogleSignInButtonViewModel` - /// containing information on the button's scheme, style, and state. + /// containing information on the button's scheme, style, and state. Defaults to + /// `GoogleSignInButtonViewModel` with its standard defaults. /// - parameter action: A closure to use as the button's action upon press. + /// - seealso: Refer to `GoogleSignInButtonViewModel.swift` for its defaults. public init( - viewModel: GoogleSignInButtonViewModel, + viewModel: GoogleSignInButtonViewModel = GoogleSignInButtonViewModel(), action: @escaping () -> Void ) { self.viewModel = viewModel diff --git a/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift b/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift index 3bc3b1a2..60e0a45b 100644 --- a/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift +++ b/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift @@ -31,14 +31,16 @@ public class GoogleSignInButtonViewModel: ObservableObject { } /// Creates instances of the SwiftUI sign-in button. - /// - parameter scheme: An instance of `GoogleSignInButtonColorScheme`. - /// - parameter style: An instance of `GoogleSignInButtonStyle`. + /// - parameter scheme: An instance of `GoogleSignInButtonColorScheme`. Defaults to + /// `.light`. + /// - parameter style: An instance of `GoogleSignInButtonStyle`. Defaults to + /// `.standard`. /// - parameter state: An instance of `GoogleSignInButtonState`. Defaults to /// `.normal`. @available(iOS 13.0, macOS 10.15, *) public init( - scheme: GoogleSignInButtonColorScheme, - style: GoogleSignInButtonStyle, + scheme: GoogleSignInButtonColorScheme = .light, + style: GoogleSignInButtonStyle = .standard, state: GoogleSignInButtonState = .normal) { self.scheme = scheme self.style = style diff --git a/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift b/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift index 48bab51c..1fab2230 100644 --- a/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift +++ b/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift @@ -23,14 +23,7 @@ struct SignInView: View { var body: some View { VStack { HStack { - let buttonViewModel = GoogleSignInButtonViewModel( - scheme: .light, - style: .standard - ) - GoogleSignInButton( - viewModel: buttonViewModel, - action: authViewModel.signIn - ) + GoogleSignInButton(action: authViewModel.signIn) .accessibility(hint: Text("Sign in with Google button.")) .padding() } From 53d336c43ebd29eea02dbe9f5933bb81acea90e6 Mon Sep 17 00:00:00 2001 From: Matthew Mathias Date: Fri, 29 Apr 2022 16:17:59 -0700 Subject: [PATCH 2/4] Add convenience initializer --- .../Sources/GoogleSignInButton.swift | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/GoogleSignInSwift/Sources/GoogleSignInButton.swift b/GoogleSignInSwift/Sources/GoogleSignInButton.swift index 5166eb74..8f47a116 100644 --- a/GoogleSignInSwift/Sources/GoogleSignInButton.swift +++ b/GoogleSignInSwift/Sources/GoogleSignInButton.swift @@ -41,6 +41,29 @@ public struct GoogleSignInButton: View { self.fontLoaded = Font.loadCGFont() } + /// A convenience initializer to create a Google Sign-In button in SwiftUI + /// with scheme, style, and state. + /// - parameter scheme: The `GoogleSignInButtonColorScheme` to use. Defaults + /// to `.light`. + /// - parameter style: The `GoogleSignInButtonStyle` to use. Defaults to + /// `.standard`. + /// - parameter state: The `GoogleSignInButtonState` to use. Defaults to + /// `.normal`. + /// - parameter action: A closure to use as the button's action upon press. + public init( + scheme: GoogleSignInButtonColorScheme = .light, + style: GoogleSignInButtonStyle = .standard, + state: GoogleSignInButtonState = .normal, + action: @escaping () -> Void + ) { + let vm = GoogleSignInButtonViewModel( + scheme: scheme, + style: style, + state: state + ) + self.init(viewModel: vm, action: action) + } + public var body: some View { Button(action: action) { switch viewModel.style { From c508ec2c480acc4b246b3aae003193de25b52d05 Mon Sep 17 00:00:00 2001 From: Matthew Mathias Date: Fri, 29 Apr 2022 16:29:05 -0700 Subject: [PATCH 3/4] Make the view model a public property on the button Marking the vm public will allow users of the convenience init providing params for scheme, style, and state to modify the button's appearance after initialization. --- GoogleSignInSwift/Sources/GoogleSignInButton.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/GoogleSignInSwift/Sources/GoogleSignInButton.swift b/GoogleSignInSwift/Sources/GoogleSignInButton.swift index 8f47a116..3a4a7200 100644 --- a/GoogleSignInSwift/Sources/GoogleSignInButton.swift +++ b/GoogleSignInSwift/Sources/GoogleSignInButton.swift @@ -22,7 +22,8 @@ import CoreGraphics /// A Google Sign In button to be used in SwiftUI. @available(iOS 13.0, macOS 10.15, *) public struct GoogleSignInButton: View { - @ObservedObject var viewModel: GoogleSignInButtonViewModel + /// An object containing the styling information needed to create the button. + @ObservedObject public var viewModel: GoogleSignInButtonViewModel private let action: () -> Void private let fontLoaded: Bool From 6b3e3cc8b4bcfd93aacd63cda13d193277f71b5a Mon Sep 17 00:00:00 2001 From: Matthew Mathias Date: Tue, 3 May 2022 13:29:00 -0700 Subject: [PATCH 4/4] Update doc comment indentation --- GoogleSignInSwift/Sources/GoogleSignInButton.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/GoogleSignInSwift/Sources/GoogleSignInButton.swift b/GoogleSignInSwift/Sources/GoogleSignInButton.swift index 3a4a7200..cb86efcd 100644 --- a/GoogleSignInSwift/Sources/GoogleSignInButton.swift +++ b/GoogleSignInSwift/Sources/GoogleSignInButton.swift @@ -29,8 +29,8 @@ public struct GoogleSignInButton: View { /// Creates an instance of the Google Sign-In button for use in SwiftUI /// - parameter viewModel: An instance of `GoogleSignInButtonViewModel` - /// containing information on the button's scheme, style, and state. Defaults to - /// `GoogleSignInButtonViewModel` with its standard defaults. + /// containing information on the button's scheme, style, and state. + /// Defaults to `GoogleSignInButtonViewModel` with its standard defaults. /// - parameter action: A closure to use as the button's action upon press. /// - seealso: Refer to `GoogleSignInButtonViewModel.swift` for its defaults. public init( @@ -45,11 +45,11 @@ public struct GoogleSignInButton: View { /// A convenience initializer to create a Google Sign-In button in SwiftUI /// with scheme, style, and state. /// - parameter scheme: The `GoogleSignInButtonColorScheme` to use. Defaults - /// to `.light`. + /// to `.light`. /// - parameter style: The `GoogleSignInButtonStyle` to use. Defaults to - /// `.standard`. + /// `.standard`. /// - parameter state: The `GoogleSignInButtonState` to use. Defaults to - /// `.normal`. + /// `.normal`. /// - parameter action: A closure to use as the button's action upon press. public init( scheme: GoogleSignInButtonColorScheme = .light,