diff --git a/Mail/Views/Menu Drawer/Folders/FolderCell.swift b/Mail/Views/Menu Drawer/Folders/FolderCell.swift index 807873598..75baae4b5 100644 --- a/Mail/Views/Menu Drawer/Folders/FolderCell.swift +++ b/Mail/Views/Menu Drawer/Folders/FolderCell.swift @@ -39,7 +39,8 @@ struct FolderCell: View { case link, indicator } - @Environment(\.folderCellType) var cellType + @Environment(\.folderCellType) private var cellType + @Environment(\.isCompactWindow) private var isCompactWindow @EnvironmentObject var splitViewManager: SplitViewManager @EnvironmentObject var navigationDrawerState: NavigationDrawerState @@ -48,7 +49,6 @@ struct FolderCell: View { var level = 0 var currentFolderId: String? - var isCompact = true var matomoCategory: MatomoUtils.EventCategory? @@ -62,13 +62,13 @@ struct FolderCell: View { var body: some View { Group { - if cellType == .indicator || isCompact { + if cellType == .indicator || isCompactWindow { Button(action: didTapButton) { FolderCellContent(folder: folder.content, level: level, isCurrentFolder: isCurrentFolder) } } else { NavigationLink(isActive: $shouldTransit) { - ThreadListManagerView(isCompact: isCompact) + ThreadListManagerView() } label: { Button { if let matomoCategory { @@ -89,7 +89,6 @@ struct FolderCell: View { folder: child, level: level + 1, currentFolderId: currentFolderId, - isCompact: isCompact, customCompletion: customCompletion ) } @@ -180,12 +179,8 @@ struct FolderCellContent: View { struct FolderCellView_Previews: PreviewProvider { static var previews: some View { - FolderCell( - folder: NestableFolder(content: PreviewHelper.sampleFolder, children: []), - currentFolderId: nil, - isCompact: false - ) - .environmentObject(PreviewHelper.sampleMailboxManager) - .environmentObject(NavigationDrawerState()) + FolderCell(folder: NestableFolder(content: PreviewHelper.sampleFolder, children: []), currentFolderId: nil) + .environmentObject(PreviewHelper.sampleMailboxManager) + .environmentObject(NavigationDrawerState()) } } diff --git a/Mail/Views/Menu Drawer/Folders/RoleFoldersListView.swift b/Mail/Views/Menu Drawer/Folders/RoleFoldersListView.swift index 9edeb35c0..8af62eb7c 100644 --- a/Mail/Views/Menu Drawer/Folders/RoleFoldersListView.swift +++ b/Mail/Views/Menu Drawer/Folders/RoleFoldersListView.swift @@ -26,16 +26,13 @@ import SwiftUI struct RoleFoldersListView: View { @EnvironmentObject var splitViewManager: SplitViewManager - var folders: [NestableFolder] - - var isCompact: Bool + let folders: [NestableFolder] var body: some View { VStack(spacing: 0) { ForEach(folders) { folder in FolderCell(folder: folder, currentFolderId: splitViewManager.selectedFolder?.id, - isCompact: isCompact, matomoCategory: .menuDrawer) } } diff --git a/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift b/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift index 2afc1aa8e..52b1f5a29 100644 --- a/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift +++ b/Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift @@ -26,16 +26,14 @@ import SwiftUI import UIKit struct UserFoldersListView: View { - var folders: [NestableFolder] - - @State private var isExpanded = true - @State private var isShowingCreateFolderAlert = false + @LazyInjectService private var matomo: MatomoUtils @EnvironmentObject private var splitViewManager: SplitViewManager - let isCompact: Bool + @State private var isExpanded = true + @State private var isShowingCreateFolderAlert = false - @LazyInjectService var matomo: MatomoUtils + let folders: [NestableFolder] var body: some View { VStack(spacing: 0) { @@ -82,7 +80,6 @@ struct UserFoldersListView: View { ForEach(folders) { folder in FolderCell(folder: folder, currentFolderId: splitViewManager.selectedFolder?.id, - isCompact: isCompact, matomoCategory: .menuDrawer) } } diff --git a/Mail/Views/Menu Drawer/MenuDrawerView.swift b/Mail/Views/Menu Drawer/MenuDrawerView.swift index 092589854..3d8cfe5a6 100644 --- a/Mail/Views/Menu Drawer/MenuDrawerView.swift +++ b/Mail/Views/Menu Drawer/MenuDrawerView.swift @@ -95,13 +95,10 @@ struct NavigationDrawer: View { GeometryReader { geometryProxy in HStack { - MenuDrawerView( - mailboxManager: mailboxManager, - isCompact: true - ) - .frame(maxWidth: maxWidth) - .padding(.trailing, spacing) - .offset(x: navigationDrawerState.isOpen ? offsetWidth : -geometryProxy.size.width) + MenuDrawerView(mailboxManager: mailboxManager) + .frame(maxWidth: maxWidth) + .padding(.trailing, spacing) + .offset(x: navigationDrawerState.isOpen ? offsetWidth : -geometryProxy.size.width) Spacer() } } @@ -128,20 +125,17 @@ struct NavigationDrawer: View { } struct MenuDrawerView: View { - @EnvironmentObject var splitViewManager: SplitViewManager - - @StateObject var viewModel: MenuDrawerViewModel - @LazyInjectService private var matomo: MatomoUtils - var mailboxManager: MailboxManager + @EnvironmentObject private var splitViewManager: SplitViewManager + + @StateObject private var viewModel: MenuDrawerViewModel - var isCompact: Bool + let mailboxManager: MailboxManager - init(mailboxManager: MailboxManager, isCompact: Bool) { + init(mailboxManager: MailboxManager) { _viewModel = StateObject(wrappedValue: MenuDrawerViewModel(mailboxManager: mailboxManager)) self.mailboxManager = mailboxManager - self.isCompact = isCompact } var body: some View { @@ -156,11 +150,11 @@ struct MenuDrawerView: View { IKDivider(hasVerticalPadding: true, horizontalPadding: UIConstants.menuDrawerHorizontalPadding) - RoleFoldersListView(folders: viewModel.roleFolders, isCompact: isCompact) + RoleFoldersListView(folders: viewModel.roleFolders) IKDivider(hasVerticalPadding: true, horizontalPadding: UIConstants.menuDrawerHorizontalPadding) - UserFoldersListView(folders: viewModel.userFolders, isCompact: isCompact) + UserFoldersListView(folders: viewModel.userFolders) IKDivider(hasVerticalPadding: true, horizontalPadding: UIConstants.menuDrawerHorizontalPadding) } @@ -213,7 +207,7 @@ struct AppVersionView: View { struct MenuDrawerView_Previews: PreviewProvider { static var previews: some View { - MenuDrawerView(mailboxManager: PreviewHelper.sampleMailboxManager, isCompact: false) + MenuDrawerView(mailboxManager: PreviewHelper.sampleMailboxManager) .environmentObject(NavigationDrawerState()) } } diff --git a/Mail/Views/Search/SearchView.swift b/Mail/Views/Search/SearchView.swift index 8b69b28e9..a446ec7e8 100644 --- a/Mail/Views/Search/SearchView.swift +++ b/Mail/Views/Search/SearchView.swift @@ -23,21 +23,17 @@ import RealmSwift import SwiftUI struct SearchView: View { - @EnvironmentObject var splitViewManager: SplitViewManager + @Environment(\.isCompactWindow) private var isCompactWindow - @StateObject var viewModel: SearchViewModel + @EnvironmentObject private var splitViewManager: SplitViewManager - @Binding private var editedMessageDraft: Draft? + @StateObject private var viewModel: SearchViewModel - let isCompact: Bool + @Binding private var editedMessageDraft: Draft? - init(mailboxManager: MailboxManager, - folder: Folder, - editedMessageDraft: Binding, - isCompact: Bool) { + init(mailboxManager: MailboxManager, folder: Folder, editedMessageDraft: Binding) { _editedMessageDraft = editedMessageDraft _viewModel = StateObject(wrappedValue: SearchViewModel(mailboxManager: mailboxManager, folder: folder)) - self.isCompact = isCompact } var body: some View { @@ -103,7 +99,7 @@ struct SearchView: View { Constants.globallyResignFirstResponder() splitViewManager.showSearch = false } label: { - Image(isCompact ? MailResourcesAsset.arrowLeft.name : MailResourcesAsset.closeBig.name) + Image(isCompactWindow ? MailResourcesAsset.arrowLeft.name : MailResourcesAsset.closeBig.name) } .accessibilityLabel(MailResourcesStrings.Localizable.contentDescriptionButtonBack) } @@ -127,7 +123,6 @@ struct SearchView_Previews: PreviewProvider { static var previews: some View { SearchView(mailboxManager: PreviewHelper.sampleMailboxManager, folder: PreviewHelper.sampleFolder, - editedMessageDraft: .constant(nil), - isCompact: true) + editedMessageDraft: .constant(nil)) } } diff --git a/Mail/Views/SplitView.swift b/Mail/Views/SplitView.swift index a2b9d5012..a51ea5ed4 100644 --- a/Mail/Views/SplitView.swift +++ b/Mail/Views/SplitView.swift @@ -64,7 +64,7 @@ struct SplitView: View { if isCompact { ZStack { NBNavigationStack(path: $navigationStore.threadPath) { - ThreadListManagerView(isCompact: isCompact) + ThreadListManagerView() .accessibilityHidden(navigationDrawerController.isOpen) .nbNavigationDestination(for: Thread.self) { thread in ThreadView(thread: thread) @@ -76,13 +76,10 @@ struct SplitView: View { } } else { NavigationView { - MenuDrawerView( - mailboxManager: mailboxManager, - isCompact: isCompact - ) - .navigationBarHidden(true) + MenuDrawerView(mailboxManager: mailboxManager) + .navigationBarHidden(true) - ThreadListManagerView(isCompact: isCompact) + ThreadListManagerView() if let thread = navigationStore.threadPath.last { ThreadView(thread: thread) diff --git a/Mail/Views/Thread List/ThreadListView.swift b/Mail/Views/Thread List/ThreadListView.swift index d16fed9c7..782b66110 100644 --- a/Mail/Views/Thread List/ThreadListView.swift +++ b/Mail/Views/Thread List/ThreadListView.swift @@ -56,8 +56,6 @@ struct ThreadListView: View { @LazyInjectService private var matomo: MatomoUtils - let isCompact: Bool - private var shouldDisplayEmptyView: Bool { viewModel.folder.lastUpdate != nil && viewModel.sections.isEmpty && !viewModel.isLoadingPage } @@ -78,7 +76,6 @@ struct ThreadListView: View { isCompact: isCompact)) _multipleSelectionViewModel = StateObject(wrappedValue: ThreadListMultipleSelectionViewModel(mailboxManager: mailboxManager)) - self.isCompact = isCompact UITableViewCell.appearance().focusEffect = .none } @@ -177,8 +174,7 @@ struct ThreadListView: View { isRefreshing = false } } - .modifier(ThreadListToolbar(isCompact: isCompact, - flushAlert: $flushAlert, + .modifier(ThreadListToolbar(flushAlert: $flushAlert, viewModel: viewModel, multipleSelectionViewModel: multipleSelectionViewModel) { withAnimation(.default.speed(2)) { @@ -249,20 +245,20 @@ struct ThreadListView: View { } private struct ThreadListToolbar: ViewModifier { - var isCompact: Bool + @LazyInjectService private var matomo: MatomoUtils - @Binding var flushAlert: FlushAlertState? + @Environment(\.isCompactWindow) var isCompactWindow - @ObservedObject var viewModel: ThreadListViewModel - @ObservedObject var multipleSelectionViewModel: ThreadListMultipleSelectionViewModel + @EnvironmentObject private var splitViewManager: SplitViewManager + @EnvironmentObject private var navigationDrawerState: NavigationDrawerState @State private var isShowingSwitchAccount = false @State private var multipleSelectionActionsTarget: ActionsTarget? - @EnvironmentObject var splitViewManager: SplitViewManager - @EnvironmentObject var navigationDrawerState: NavigationDrawerState + @Binding var flushAlert: FlushAlertState? - @LazyInjectService private var matomo: MatomoUtils + @ObservedObject var viewModel: ThreadListViewModel + @ObservedObject var multipleSelectionViewModel: ThreadListMultipleSelectionViewModel var selectAll: () -> Void @@ -278,7 +274,7 @@ private struct ThreadListToolbar: ViewModifier { } } } else { - if isCompact { + if isCompactWindow { Button { matomo.track(eventWithCategory: .menuDrawer, name: "openByButton") navigationDrawerState.open() diff --git a/Mail/Views/ThreadListManagerView.swift b/Mail/Views/ThreadListManagerView.swift index a5dde54cb..b838b9af0 100644 --- a/Mail/Views/ThreadListManagerView.swift +++ b/Mail/Views/ThreadListManagerView.swift @@ -22,16 +22,16 @@ import MailResources import SwiftUI struct ThreadListManagerView: View { - @EnvironmentObject var splitViewManager: SplitViewManager - @EnvironmentObject var mailboxManager: MailboxManager + @Environment(\.isCompactWindow) private var isCompactWindow + + @EnvironmentObject private var splitViewManager: SplitViewManager + @EnvironmentObject private var mailboxManager: MailboxManager @State private var shouldNavigateToNotificationThread = false @State private var tappedNotificationThread: Thread? @State private var editedMessageDraft: Draft? @State private var messageReply: MessageReply? - let isCompact: Bool - var body: some View { Group { if let selectedFolder = splitViewManager.selectedFolder { @@ -39,8 +39,7 @@ struct ThreadListManagerView: View { SearchView( mailboxManager: mailboxManager, folder: selectedFolder, - editedMessageDraft: $editedMessageDraft, - isCompact: isCompact + editedMessageDraft: $editedMessageDraft ) } else { ThreadListView( @@ -48,7 +47,7 @@ struct ThreadListManagerView: View { folder: selectedFolder, editedMessageDraft: $editedMessageDraft, messageReply: $messageReply, - isCompact: isCompact + isCompact: isCompactWindow ) } } @@ -62,9 +61,7 @@ struct ThreadListManagerView: View { struct ThreadListManagerView_Previews: PreviewProvider { static var previews: some View { - ThreadListManagerView( - isCompact: false - ) + ThreadListManagerView() .environmentObject(PreviewHelper.sampleMailboxManager) } }