Skip to content

Commit

Permalink
Merge pull request #710 from Infomaniak/mailboxmanager-env
Browse files Browse the repository at this point in the history
refactor: Mailboxmanager as EnvironmentObject
  • Loading branch information
Ambrdctr committed Apr 26, 2023
2 parents 1b504b1 + 1436394 commit 1bc7e0c
Show file tree
Hide file tree
Showing 17 changed files with 91 additions and 142 deletions.
9 changes: 3 additions & 6 deletions Mail/Components/ThreadCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ struct ThreadCellDataHolder {
/// Last message of the thread, except for the Sent folder where we use the last message of the folder
let preview: String

init(thread: Thread, mailboxManager: MailboxManager) {
init(thread: Thread) {
let lastMessageNotFromSent = thread.messages.last { $0.folder?.role != .sent } ?? thread.messages.last
recipientToDisplay = lastMessageNotFromSent?.from.last

Expand All @@ -80,8 +80,8 @@ struct ThreadCellDataHolder {
}

struct ThreadCell: View {
@EnvironmentObject private var mailboxManager: MailboxManager
let thread: Thread
let mailboxManager: MailboxManager

let dataHolder: ThreadCellDataHolder

Expand All @@ -106,15 +106,13 @@ struct ThreadCell: View {

init(
thread: Thread,
mailboxManager: MailboxManager,
density: ThreadDensity,
isMultipleSelectionEnabled: Bool = false,
isSelected: Bool = false
) {
self.thread = thread
self.mailboxManager = mailboxManager

dataHolder = ThreadCellDataHolder(thread: thread, mailboxManager: mailboxManager)
dataHolder = ThreadCellDataHolder(thread: thread)

self.density = density
self.isMultipleSelectionEnabled = isMultipleSelectionEnabled
Expand Down Expand Up @@ -176,7 +174,6 @@ struct ThreadCell: View {
struct ThreadCell_Previews: PreviewProvider {
static var previews: some View {
ThreadCell(thread: PreviewHelper.sampleThread,
mailboxManager: PreviewHelper.sampleMailboxManager,
density: .large,
isMultipleSelectionEnabled: false,
isSelected: false)
Expand Down
3 changes: 2 additions & 1 deletion Mail/Views/AlertView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,8 @@ extension View {
struct AlertView_Previews: PreviewProvider {
static var previews: some View {
AlertView {
CreateFolderView(mailboxManager: PreviewHelper.sampleMailboxManager, mode: .create)
CreateFolderView(mode: .create)
}
.environmentObject(PreviewHelper.sampleMailboxManager)
}
}
22 changes: 10 additions & 12 deletions Mail/Views/Alerts/CreateFolderView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import RealmSwift
import SwiftUI

struct CreateFolderView: View {
@StateObject private var mailboxManager: MailboxManager
@EnvironmentObject private var mailboxManager: MailboxManager
@ObservedResults(Folder.self) private var folders

@State private var folderName = ""
Expand All @@ -34,7 +34,7 @@ struct CreateFolderView: View {

@FocusState private var isFocused

private var mode: Mode
let mode: Mode

enum Mode {
case create
Expand Down Expand Up @@ -64,12 +64,6 @@ struct CreateFolderView: View {
}
}

init(mailboxManager: MailboxManager, mode: Mode) {
_folders = .init(Folder.self, configuration: AccountManager.instance.currentMailboxManager?.realmConfiguration)
_mailboxManager = StateObject(wrappedValue: mailboxManager)
self.mode = mode
}

var body: some View {
VStack(alignment: .leading) {
Text(MailResourcesStrings.Localizable.newFolderDialogTitle)
Expand All @@ -81,7 +75,8 @@ struct CreateFolderView: View {
.padding(12)
.overlay(
RoundedRectangle(cornerRadius: 4)
.stroke(error == nil ? MailResourcesAsset.textFieldBorder.swiftUIColor : MailResourcesAsset.redColor.swiftUIColor)
.stroke(error == nil ? MailResourcesAsset.textFieldBorder.swiftUIColor : MailResourcesAsset.redColor
.swiftUIColor)
.animation(.easeInOut, value: error)
)
.textStyle(.body)
Expand All @@ -98,7 +93,7 @@ struct CreateFolderView: View {
Task {
await tryOrDisplayError {
let folder = try await mailboxManager.createFolder(name: folderName)
if case let .move(moveHandler) = mode {
if case .move(let moveHandler) = mode {
moveHandler(folder)
NotificationCenter.default.post(Notification(name: Constants.dismissMoveSheetNotificationName))
}
Expand Down Expand Up @@ -128,7 +123,10 @@ struct CreateFolderView: View {

struct CreateFolderView_Previews: PreviewProvider {
static var previews: some View {
CreateFolderView(mailboxManager: PreviewHelper.sampleMailboxManager, mode: .create)
CreateFolderView(mailboxManager: PreviewHelper.sampleMailboxManager, mode: .move { _ in /* Preview */ })
Group {
CreateFolderView(mode: .create)
CreateFolderView(mode: .move { _ in /* Preview */ })
}
.environmentObject(PreviewHelper.sampleMailboxManager)
}
}
7 changes: 4 additions & 3 deletions Mail/Views/Alerts/ReportPhishingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import MailResources
import SwiftUI

struct ReportPhishingView: View {
let mailboxManager: MailboxManager
@EnvironmentObject private var mailboxManager: MailboxManager
let message: Message

var body: some View {
Expand All @@ -31,7 +31,7 @@ struct ReportPhishingView: View {
.textStyle(.bodyMedium)
.frame(maxWidth: .infinity, alignment: .leading)
Text(MailResourcesStrings.Localizable.reportPhishingDescription)
.textStyle(.bodySecondary)
.textStyle(.bodySecondary)
ModalButtonsView(primaryButtonTitle: MailResourcesStrings.Localizable.buttonReport, primaryButtonAction: report)
.padding(.top, 8)
}
Expand All @@ -54,6 +54,7 @@ struct ReportPhishingView: View {

struct PhishingView_Previews: PreviewProvider {
static var previews: some View {
ReportPhishingView(mailboxManager: PreviewHelper.sampleMailboxManager, message: PreviewHelper.sampleMessage)
ReportPhishingView(message: PreviewHelper.sampleMessage)
.environmentObject(PreviewHelper.sampleMailboxManager)
}
}
7 changes: 4 additions & 3 deletions Mail/Views/Bottom sheets/ReportDisplayProblemView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import Sentry
import SwiftUI

struct ReportDisplayProblemView: View {
let mailboxManager: MailboxManager
@EnvironmentObject private var mailboxManager: MailboxManager
let message: Message

var body: some View {
Expand All @@ -37,7 +37,7 @@ struct ReportDisplayProblemView: View {
ModalButtonsView(primaryButtonTitle: MailResourcesStrings.Localizable.buttonAccept,
secondaryButtonTitle: MailResourcesStrings.Localizable.buttonRefuse,
primaryButtonAction: report)
.padding(.top, 8)
.padding(.top, 8)
}
.padding(.horizontal, UIConstants.bottomSheetHorizontalPadding)
.matomoView(view: [MatomoUtils.View.bottomSheet.displayName, "ReportDisplayProblemView"])
Expand All @@ -63,6 +63,7 @@ struct ReportDisplayProblemView: View {

struct ReportDisplayProblemView_Previews: PreviewProvider {
static var previews: some View {
ReportDisplayProblemView(mailboxManager: PreviewHelper.sampleMailboxManager, message: PreviewHelper.sampleMessage)
ReportDisplayProblemView(message: PreviewHelper.sampleMessage)
.environmentObject(PreviewHelper.sampleMailboxManager)
}
}
6 changes: 1 addition & 5 deletions Mail/Views/Menu Drawer/Folders/FolderCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ struct FolderCell: View {
@Environment(\.folderCellType) var cellType

@EnvironmentObject var splitViewManager: SplitViewManager
@EnvironmentObject var mailboxManager: MailboxManager
@EnvironmentObject var navigationDrawerState: NavigationDrawerState

let folder: NestableFolder
Expand All @@ -69,10 +68,7 @@ struct FolderCell: View {
}
} else {
NavigationLink(isActive: $shouldTransit) {
ThreadListManagerView(
mailboxManager: mailboxManager,
isCompact: isCompact
)
ThreadListManagerView(isCompact: isCompact)
} label: {
Button {
if let matomoCategory {
Expand Down
9 changes: 6 additions & 3 deletions Mail/Views/Menu Drawer/Folders/UserFoldersListView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ struct UserFoldersListView: View {
var folders: [NestableFolder]

@State private var isExpanded = true
@State private var isShowingCreateFolderAlert = false

@EnvironmentObject var splitViewManager: SplitViewManager
@EnvironmentObject var globalAlert: GlobalAlert
@EnvironmentObject private var splitViewManager: SplitViewManager

let isCompact: Bool

Expand All @@ -58,13 +58,16 @@ struct UserFoldersListView: View {

Button {
matomo.track(eventWithCategory: .createFolder, name: "fromMenuDrawer")
globalAlert.state = .createNewFolder(mode: .create)
isShowingCreateFolderAlert.toggle()
} label: {
MailResourcesAsset.addCircle.swiftUIImage
.resizable()
.frame(width: 16, height: 16)
}
.accessibilityLabel(MailResourcesStrings.Localizable.newFolderDialogTitle)
.customAlert(isPresented: $isShowingCreateFolderAlert) {
CreateFolderView(mode: .create)
}
}
.padding(.horizontal, UIConstants.menuDrawerHorizontalPadding)
.padding(.vertical, UIConstants.menuDrawerVerticalPadding)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ struct MailboxesManagementView: View {
}
}
.sheet(isPresented: $isShowingSwitchAccount) {
SheetView(mailboxManager: mailboxManager) {
SheetView {
AccountListView()
}
}
Expand Down
14 changes: 7 additions & 7 deletions Mail/Views/Menu Drawer/MenuDrawerView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,13 @@ struct NavigationDrawer: View {
private let maxWidth = 350.0
private let spacing = 60.0

let mailboxManager: MailboxManager
@Environment(\.window) private var window

@EnvironmentObject var splitViewManager: SplitViewManager
@EnvironmentObject var navigationDrawerState: NavigationDrawerState
@Environment(\.window) var window
@GestureState var isDragGestureActive = false
@EnvironmentObject private var mailboxManager: MailboxManager
@EnvironmentObject private var splitViewManager: SplitViewManager
@EnvironmentObject private var navigationDrawerState: NavigationDrawerState

@GestureState private var isDragGestureActive = false

@State private var offsetWidth: CGFloat = 0

Expand Down Expand Up @@ -190,13 +191,12 @@ struct MenuDrawerView: View {
}
}
.background(MailResourcesAsset.backgroundSecondaryColor.swiftUIColor.ignoresSafeArea())
.environmentObject(mailboxManager)
.environment(\.folderCellType, .link)
.onAppear {
viewModel.createMenuItems(bottomSheet: bottomSheet)
}
.sheet(isPresented: $viewModel.isShowingHelp) {
SheetView(mailboxManager: mailboxManager) {
SheetView {
HelpView()
}
}
Expand Down
2 changes: 1 addition & 1 deletion Mail/Views/Menu Drawer/MenuHeaderView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ struct MenuHeaderView: View {
.clipped()
.shadow(color: MailResourcesAsset.menuDrawerShadowColor.swiftUIColor, radius: 1, x: 0, y: 2)
.sheet(isPresented: $isShowingSettings) {
SheetView(mailboxManager: mailboxManager) {
SheetView {
SettingsView()
}
}
Expand Down
19 changes: 6 additions & 13 deletions Mail/Views/Search/SearchThreadsSectionView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,21 @@ struct SearchThreadsSectionView: View {
editedMessageDraft: $editedMessageDraft
)
}, label: {
ThreadCell(thread: thread,
mailboxManager: viewModel.mailboxManager,
density: threadDensity)
ThreadCell(thread: thread, density: threadDensity)
})
} else {
ZStack {
NavigationLink(destination: {
ThreadView(
mailboxManager: viewModel.mailboxManager,
thread: thread
)
.onAppear {
viewModel.selectedThread = thread
}
ThreadView(thread: thread)
.onAppear {
viewModel.selectedThread = thread
}
}, label: {
EmptyView()
})
.opacity(0)

ThreadCell(thread: thread,
mailboxManager: viewModel.mailboxManager,
density: threadDensity)
ThreadCell(thread: thread, density: threadDensity)
}
}
}
Expand Down
26 changes: 2 additions & 24 deletions Mail/Views/SheetView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,9 @@ import MailResources
import SwiftUI

struct SheetView<Content>: View where Content: View {
@StateObject private var alert = GlobalAlert()

@Environment(\.dismiss) private var dismiss

let mailboxManager: MailboxManager
let content: Content

init(mailboxManager: MailboxManager, @ViewBuilder _ content: () -> Content) {
self.mailboxManager = mailboxManager
self.content = content()
}
@ViewBuilder let content: Content

var body: some View {
NavigationView {
Expand All @@ -42,29 +34,15 @@ struct SheetView<Content>: View where Content: View {
Label(MailResourcesStrings.Localizable.buttonClose, systemImage: "xmark")
})
}
.customAlert(isPresented: $alert.isShowing) {
switch alert.state {
case let .createNewFolder(mode):
CreateFolderView(mailboxManager: mailboxManager, mode: mode)
case let .reportPhishing(message):
ReportPhishingView(mailboxManager: mailboxManager, message: message)
case let .reportDisplayProblem(message):
ReportDisplayProblemView(mailboxManager: mailboxManager, message: message)
case .none:
EmptyView()
}
}
.defaultAppStorage(.shared)
.onReceive(NotificationCenter.default.publisher(for: Constants.dismissMoveSheetNotificationName)) { _ in
dismiss()
}
.environmentObject(alert)
}
}

struct SheetView_Previews: PreviewProvider {
static var previews: some View {
SheetView(mailboxManager: PreviewHelper.sampleMailboxManager) {
SheetView {
EmptyView()
}
}
Expand Down
Loading

0 comments on commit 1bc7e0c

Please sign in to comment.