Skip to content

Commit

Permalink
feat: Smaller buttons
Browse files Browse the repository at this point in the history
  • Loading branch information
valentinperignon committed Sep 14, 2023
1 parent da619e3 commit d826246
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 12 deletions.
22 changes: 12 additions & 10 deletions Mail/Components/Buttons/MailButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ struct MailButtonFullWidthKey: EnvironmentKey {
static var defaultValue = false
}

struct MailButtonFloatingActionButtonKey: EnvironmentKey {
struct MailButtonMinimizeHeightKey: EnvironmentKey {
static var defaultValue = false
}

Expand All @@ -53,9 +53,9 @@ extension EnvironmentValues {
set { self[MailButtonFullWidthKey.self] = newValue }
}

var mailButtonFloatingActionButton: Bool {
get { self[MailButtonFloatingActionButtonKey.self] }
set { self[MailButtonFloatingActionButtonKey.self] = newValue }
var mailButtonMinimizeHeight: Bool {
get { self[MailButtonMinimizeHeightKey.self] }
set { self[MailButtonMinimizeHeightKey.self] = newValue }
}

var mailButtonIconSize: CGFloat {
Expand All @@ -78,8 +78,8 @@ extension View {
environment(\.mailButtonFullWidth, fullWidth)
}

func mailButtonFloatingActionButton(_ floatingActionButton: Bool) -> some View {
environment(\.mailButtonFloatingActionButton, floatingActionButton)
func mailButtonMinimizeHeight(_ minimize: Bool) -> some View {
environment(\.mailButtonMinimizeHeight, minimize)
}

func mailButtonIconSize(_ size: CGFloat) -> some View {
Expand All @@ -98,7 +98,6 @@ struct MailButton: View {

@Environment(\.mailButtonStyle) private var style: Style
@Environment(\.mailButtonFullWidth) private var fullWidth: Bool
@Environment(\.mailButtonFloatingActionButton) private var floatingActionButton: Bool
@Environment(\.mailButtonIconSize) private var iconSize: CGFloat
@Environment(\.mailButtonLoading) private var loading: Bool

Expand All @@ -108,7 +107,11 @@ struct MailButton: View {
let action: () -> Void

enum Style {
case large, link, smallLink, destructive
case floatingActionButton, large, link, smallLink, destructive
}

private var iconOnlyButton: Bool {
return label == nil
}

var body: some View {
Expand All @@ -131,10 +134,9 @@ struct MailButton: View {
.opacity(loading ? 1 : 0)
}
.frame(maxWidth: fullWidth ? UIConstants.componentsMaxWidth : nil)
.frame(height: fullWidth || floatingActionButton ? 56 : 40)
}
.disabled(loading || !isEnabled)
.buttonStyle(MailButtonStyle(style: style))
.buttonStyle(MailButtonStyle(style: style, iconOnlyButton: iconOnlyButton))
.animation(.easeOut(duration: 0.25), value: isEnabled)
}
}
Expand Down
27 changes: 26 additions & 1 deletion Mail/Components/Buttons/MailButtonStyle.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,34 @@ struct MailButtonStyle: ButtonStyle {
@Environment(\.colorScheme) private var colorScheme
@Environment(\.isEnabled) private var isEnabled

@Environment(\.mailButtonFullWidth) private var fullWidth: Bool
@Environment(\.mailButtonMinimizeHeight) private var minimizeHeight: Bool

let style: MailButton.Style
let iconOnlyButton: Bool

private var buttonHeight: CGFloat? {
guard !minimizeHeight else { return nil }

if style == .floatingActionButton {
return iconOnlyButton ? 64 : 56
} else if fullWidth {
return 56
} else {
return 40
}
}

private var buttonWidth: CGFloat? {
if style == .floatingActionButton && iconOnlyButton {
return 64
}
return nil
}

func makeBody(configuration: Configuration) -> some View {
switch style {
case .large:
case .large, .floatingActionButton:
largeStyle(configuration: configuration)
case .link, .smallLink, .destructive:
linkStyle(configuration: configuration)
Expand All @@ -39,6 +62,7 @@ struct MailButtonStyle: ButtonStyle {
configuration.label
.textStyle(isEnabled ? .bodyMediumOnAccent : .bodyMediumOnDisabled)
.padding(.horizontal, value: .medium)
.frame(width: buttonWidth, height: buttonHeight)
.background(largeBackground(configuration: configuration))
.clipShape(RoundedRectangle(cornerRadius: UIConstants.buttonsRadius))
.brightness(largeBrightness(configuration: configuration))
Expand All @@ -48,6 +72,7 @@ struct MailButtonStyle: ButtonStyle {
configuration.label
.textStyle(linkTextStyle())
.opacity(configuration.isPressed ? 0.7 : 1)
.frame(width: buttonWidth, height: buttonHeight)
}

private func largeBackground(configuration: Configuration) -> Color {
Expand Down
2 changes: 1 addition & 1 deletion Mail/Utils/FloatingActionButtonModifier.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ struct FloatingActionButtonModifier: ViewModifier {

if isEnabled {
MailButton(icon: icon, label: title, action: action)
.mailButtonFloatingActionButton(true)
.mailButtonStyle(.floatingActionButton)
.padding(.trailing, value: .medium)
.padding(.bottom, UIPadding.floatingButtonBottom)
.modifier(snackBarAwareModifier)
Expand Down
1 change: 1 addition & 0 deletions Mail/Views/Onboarding/OnboardingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ struct OnboardingView: View {
}
}
.mailButtonIconSize(24)
.mailButtonStyle(.floatingActionButton)
}
}
.padding(.horizontal, value: .medium)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ struct UpdateMailboxPasswordView: View {
isShowingDetachMailboxAlertView = true
}
.mailButtonStyle(.link)
.mailButtonMinimizeHeight(true)
.disabled(isLoading)
}

Expand Down

0 comments on commit d826246

Please sign in to comment.