Skip to content

Commit

Permalink
fix(ToolbarButton): Remove Geometry reader for sizing
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilippeWeidmann committed Apr 20, 2023
1 parent 187c159 commit 1330a9a
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 90 deletions.
9 changes: 2 additions & 7 deletions Mail/Components/ToolbarButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,11 @@ struct ToolbarButton: View {

let text: String
let icon: Image
let width: CGFloat?
let action: () -> Void

init(text: String, icon: Image, width: CGFloat? = nil, action: @escaping () -> Void) {
init(text: String, icon: Image, action: @escaping () -> Void) {
self.text = text
self.icon = icon
self.width = width
self.action = action
}

Expand All @@ -42,13 +40,10 @@ struct ToolbarButton: View {
.textStyle(MailTextStyle.labelMediumAccent)
} icon: {
icon
.resizable()
.scaledToFit()
.frame(width: 22, height: 22)
}
.dynamicLabelStyle(sizeClass: sizeClass ?? .regular)
}
.frame(width: width, alignment: .center)
.frame(maxWidth: .infinity)
}
}

Expand Down
161 changes: 78 additions & 83 deletions Mail/Views/Thread List/ThreadListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -300,110 +300,105 @@ private struct ThreadListToolbar: ViewModifier {
var selectAll: () -> Void

func body(content: Content) -> some View {
GeometryReader { reader in
content
.toolbar {
ToolbarItemGroup(placement: .navigationBarLeading) {
if multipleSelectionViewModel.isEnabled {
Button(MailResourcesStrings.Localizable.buttonCancel) {
matomo.track(eventWithCategory: .multiSelection, name: "cancel")
withAnimation {
multipleSelectionViewModel.isEnabled = false
}
}
} else {
if isCompact {
Button {
matomo.track(eventWithCategory: .menuDrawer, name: "openByButton")
navigationDrawerState.open()
} label: {
MailResourcesAsset.burger.swiftUIImage
.resizable()
.scaledToFit()
.frame(width: UIConstants.navbarIconSize, height: UIConstants.navbarIconSize)
}
.accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionButtonMenu)
content
.toolbar {
ToolbarItemGroup(placement: .navigationBarLeading) {
if multipleSelectionViewModel.isEnabled {
Button(MailResourcesStrings.Localizable.buttonCancel) {
matomo.track(eventWithCategory: .multiSelection, name: "cancel")
withAnimation {
multipleSelectionViewModel.isEnabled = false
}
}
}

ToolbarItem(placement: .principal) {
if !multipleSelectionViewModel.isEnabled {
Text(splitViewManager.selectedFolder?.localizedName ?? "")
.textStyle(.header1)
.frame(maxWidth: .infinity, alignment: .leading)
}
}

ToolbarItemGroup(placement: .navigationBarTrailing) {
if multipleSelectionViewModel.isEnabled {
Button(multipleSelectionViewModel.selectedItems.count == viewModel.filteredThreads.count
? MailResourcesStrings.Localizable.buttonUnselectAll
: MailResourcesStrings.Localizable.buttonSelectAll) {
selectAll()
}
.animation(nil, value: multipleSelectionViewModel.selectedItems)
} else {
} else {
if isCompact {
Button {
splitViewManager.showSearch = true
matomo.track(eventWithCategory: .menuDrawer, name: "openByButton")
navigationDrawerState.open()
} label: {
MailResourcesAsset.search.swiftUIImage
MailResourcesAsset.burger.swiftUIImage
.resizable()
.scaledToFit()
.frame(width: UIConstants.navbarIconSize, height: UIConstants.navbarIconSize)
}
.accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionButtonMenu)
}
}
}

Button {
isShowingSwitchAccount.toggle()
} label: {
AvatarView(avatarDisplayable: AccountManager.instance.currentAccount.user)
ToolbarItem(placement: .principal) {
if !multipleSelectionViewModel.isEnabled {
Text(splitViewManager.selectedFolder?.localizedName ?? "")
.textStyle(.header1)
.frame(maxWidth: .infinity, alignment: .leading)
}
}

ToolbarItemGroup(placement: .navigationBarTrailing) {
if multipleSelectionViewModel.isEnabled {
Button(multipleSelectionViewModel.selectedItems.count == viewModel.filteredThreads.count
? MailResourcesStrings.Localizable.buttonUnselectAll
: MailResourcesStrings.Localizable.buttonSelectAll) {
selectAll()
}
.accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionUserAvatar)
.animation(nil, value: multipleSelectionViewModel.selectedItems)
} else {
Button {
splitViewManager.showSearch = true
} label: {
MailResourcesAsset.search.swiftUIImage
.resizable()
.scaledToFit()
.frame(width: UIConstants.navbarIconSize, height: UIConstants.navbarIconSize)
}

Button {
isShowingSwitchAccount.toggle()
} label: {
AvatarView(avatarDisplayable: AccountManager.instance.currentAccount.user)
}
.accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionUserAvatar)
}
}

ToolbarItemGroup(placement: .bottomBar) {
if multipleSelectionViewModel.isEnabled {
HStack(spacing: 0) {
ForEach(multipleSelectionViewModel.toolbarActions) { action in
ToolbarButton(
text: action.shortTitle ?? action.title,
icon: action.icon,
width: reader.size.width / 5
) {
Task {
await tryOrDisplayError {
try await multipleSelectionViewModel.didTap(
action: action,
flushAlert: $flushAlert
)
}
ToolbarItemGroup(placement: .bottomBar) {
if multipleSelectionViewModel.isEnabled {
HStack(spacing: 0) {
ForEach(multipleSelectionViewModel.toolbarActions) { action in
ToolbarButton(
text: action.shortTitle ?? action.title,
icon: action.icon) {
Task {
await tryOrDisplayError {
try await multipleSelectionViewModel.didTap(
action: action,
flushAlert: $flushAlert
)
}
}
.disabled(action == .archive && splitViewManager.selectedFolder?.role == .archive)
}
.disabled(action == .archive && splitViewManager.selectedFolder?.role == .archive)
}

ToolbarButton(text: MailResourcesStrings.Localizable.buttonMore,
icon: MailResourcesAsset.plusActions.swiftUIImage,
width: reader.size.width / 5) {
bottomSheet
.open(state: .actions(.threads(Array(multipleSelectionViewModel.selectedItems), true)))
}
ToolbarButton(text: MailResourcesStrings.Localizable.buttonMore,
icon: MailResourcesAsset.plusActions.swiftUIImage) {
bottomSheet
.open(state: .actions(.threads(Array(multipleSelectionViewModel.selectedItems), true)))
}
.disabled(multipleSelectionViewModel.selectedItems.isEmpty)
}
.disabled(multipleSelectionViewModel.selectedItems.isEmpty)
}
}
.navigationTitle(
multipleSelectionViewModel.isEnabled
? MailResourcesStrings.Localizable.multipleSelectionCount(multipleSelectionViewModel.selectedItems.count)
: ""
)
.navigationBarTitleDisplayMode(.inline)
}
.sheet(isPresented: $isShowingSwitchAccount) {
AccountView(mailboxes: AccountManager.instance.mailboxes)
}
}
.navigationTitle(
multipleSelectionViewModel.isEnabled
? MailResourcesStrings.Localizable.multipleSelectionCount(multipleSelectionViewModel.selectedItems.count)
: ""
)
.navigationBarTitleDisplayMode(.inline)
.sheet(isPresented: $isShowingSwitchAccount) {
AccountView(mailboxes: AccountManager.instance.mailboxes)
}
}
}

Expand Down

0 comments on commit 1330a9a

Please sign in to comment.