Skip to content

Commit db073b2

Browse files
refactor: Separate delete and flush actions
1 parent 18b45f5 commit db073b2

File tree

7 files changed

+41
-47
lines changed

7 files changed

+41
-47
lines changed

Mail/Utils/ShortcutModifier.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ struct ShortcutModifier: ViewModifier {
6060
content
6161
}
6262
.customAlert(item: $destructiveAlert) { item in
63-
DestructiveActionAlertView(destructiveAlert: item, folder: viewModel.frozenFolder)
63+
DestructiveActionAlertView(destructiveAlert: item)
6464
}
6565
}
6666

Mail/Views/Bottom sheets/Actions/ActionsPanelViewModifier.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ struct ActionsPanelViewModifier: ViewModifier {
131131
)
132132
}
133133
.customAlert(item: $destructiveAlert) { item in
134-
DestructiveActionAlertView(destructiveAlert: item, folder: originFolder)
134+
DestructiveActionAlertView(destructiveAlert: item)
135135
}
136136
.customAlert(item: $messagesToDownload) { messages in
137137
ConfirmationSaveThreadInKdrive(targetMessages: messages)

Mail/Views/Thread List/DestructiveActionAlertView.swift

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -25,50 +25,48 @@ import MailResources
2525
import SwiftUI
2626

2727
extension DestructiveActionAlertState {
28-
func title(in folder: Folder?) -> String {
28+
var title: String {
2929
switch type {
30-
case .delete:
31-
if let impactedMessages {
32-
return MailResourcesStrings.Localizable.threadListDeletionConfirmationAlertTitle(impactedMessages)
33-
} else {
34-
switch folder?.role {
35-
case .spam:
36-
return MailResourcesStrings.Localizable.threadListEmptySpamButton
37-
case .trash:
38-
return MailResourcesStrings.Localizable.threadListEmptyTrashButton
39-
default:
40-
return ""
41-
}
30+
case .flushFolder(let frozenFolder):
31+
switch frozenFolder?.role {
32+
case .spam:
33+
return MailResourcesStrings.Localizable.threadListEmptySpamButton
34+
case .trash:
35+
return MailResourcesStrings.Localizable.threadListEmptyTrashButton
36+
default:
37+
return ""
4238
}
4339

40+
case .permanentlyDelete(let impactedMessages):
41+
return MailResourcesStrings.Localizable.threadListDeletionConfirmationAlertTitle(impactedMessages)
42+
4443
case .deleteSnooze:
45-
return "!TODO"
44+
return MailResourcesStrings.Localizable.actionDelete
4645

4746
case .archiveSnooze:
48-
return "!TODO"
47+
return MailResourcesStrings.Localizable.actionArchive
4948

5049
case .moveSnooze:
51-
return "!TODO"
50+
return MailResourcesStrings.Localizable.actionMove
5251
}
5352
}
5453

5554
var description: String {
5655
switch type {
57-
case .delete:
58-
if let impactedMessages {
59-
return MailResourcesStrings.Localizable.threadListDeletionConfirmationAlertDescription(impactedMessages)
60-
} else {
61-
return MailResourcesStrings.Localizable.threadListEmptyFolderAlertDescription
62-
}
56+
case .flushFolder:
57+
return MailResourcesStrings.Localizable.threadListEmptyFolderAlertDescription
6358

64-
case .deleteSnooze:
65-
return "!TODO"
59+
case .permanentlyDelete(let impactedMessages):
60+
return MailResourcesStrings.Localizable.threadListDeletionConfirmationAlertDescription(impactedMessages)
6661

67-
case .archiveSnooze:
68-
return "!TODO"
62+
case .deleteSnooze(let impactedMessages):
63+
return MailResourcesStrings.Localizable.snoozeDeleteConfirmAlertDescription(impactedMessages)
6964

70-
case .moveSnooze:
71-
return "!TODO"
65+
case .archiveSnooze(let impactedMessages):
66+
return MailResourcesStrings.Localizable.snoozeArchiveConfirmAlertDescription(impactedMessages)
67+
68+
case .moveSnooze(let impactedMessages):
69+
return MailResourcesStrings.Localizable.snoozeArchiveConfirmAlertDescription(impactedMessages)
7270
}
7371
}
7472
}
@@ -77,22 +75,20 @@ struct DestructiveActionAlertView: View {
7775
@LazyInjectService private var matomo: MatomoUtils
7876

7977
let destructiveAlert: DestructiveActionAlertState
80-
var frozenFolder: Folder?
8178

82-
init(destructiveAlert: DestructiveActionAlertState, folder: Folder? = nil) {
79+
init(destructiveAlert: DestructiveActionAlertState) {
8380
self.destructiveAlert = destructiveAlert
84-
frozenFolder = folder?.freezeIfNeeded()
8581
}
8682

8783
var body: some View {
8884
VStack(alignment: .leading, spacing: IKPadding.large) {
89-
Text(destructiveAlert.title(in: frozenFolder))
85+
Text(destructiveAlert.title)
9086
.textStyle(.bodyMedium)
9187
Text(destructiveAlert.description)
9288
.textStyle(.body)
9389

9490
ModalButtonsView(primaryButtonTitle: MailResourcesStrings.Localizable.buttonConfirm) {
95-
if let frozenFolder, destructiveAlert.impactedMessages == nil {
91+
if case let .flushFolder(frozenFolder) = destructiveAlert.type, let frozenFolder {
9692
matomo.track(eventWithCategory: .threadList, name: "empty\(frozenFolder.matomoName.capitalized)Confirm")
9793
}
9894
await destructiveAlert.completion()
@@ -102,5 +98,5 @@ struct DestructiveActionAlertView: View {
10298
}
10399

104100
#Preview {
105-
DestructiveActionAlertView(destructiveAlert: DestructiveActionAlertState(type: .delete) { /* Preview */ })
101+
DestructiveActionAlertView(destructiveAlert: DestructiveActionAlertState(type: .deleteSnooze(10)) { /* Preview */ })
106102
}

Mail/Views/Thread List/FlushFolderView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ struct FlushFolderView: View {
6060
matomo.track(eventWithCategory: .threadList, name: "empty\(folder.matomoName.capitalized)")
6161

6262
let frozenFolder = folder.freezeIfNeeded()
63-
destructiveAlert = DestructiveActionAlertState(type: .delete) {
63+
destructiveAlert = DestructiveActionAlertState(type: .flushFolder(frozenFolder)) {
6464
await tryOrDisplayError {
6565
_ = try await mailboxManager.flushFolder(folder: frozenFolder)
6666
}

Mail/Views/Thread List/ThreadListView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ struct ThreadListView: View {
221221
updateFetchingTask()
222222
}
223223
.customAlert(item: $mainViewState.destructiveAlert) { item in
224-
DestructiveActionAlertView(destructiveAlert: item, folder: viewModel.frozenFolder)
224+
DestructiveActionAlertView(destructiveAlert: item)
225225
}
226226
.customAlert(isPresented: $isShowingUpdateAlert) {
227227
// swiftlint:disable:next trailing_closure

MailCore/Cache/Actions/ActionsManager.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,7 @@ public class ActionsManager: ObservableObject {
114114
guard origin.frozenFolder?.shouldWarnBeforeDeletion != true else {
115115
Task { @MainActor in
116116
origin.nearestDestructiveAlert?.wrappedValue = DestructiveActionAlertState(
117-
type: .delete,
118-
impactedMessages: messagesWithDuplicates.uniqueThreadsInFolder(origin.frozenFolder).count
117+
type: .permanentlyDelete(messagesWithDuplicates.uniqueThreadsInFolder(origin.frozenFolder).count)
119118
) {
120119
await tryOrDisplayError { [weak self] in
121120
try await self?.performDelete(

MailCore/Utils/DestructiveActionAlertState.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,20 @@
1919
import Foundation
2020

2121
public enum DestructiveActionAlertType {
22-
case delete
23-
case deleteSnooze
24-
case archiveSnooze
25-
case moveSnooze
22+
case permanentlyDelete(Int)
23+
case flushFolder(Folder?)
24+
case deleteSnooze(Int)
25+
case archiveSnooze(Int)
26+
case moveSnooze(Int)
2627
}
2728

2829
public struct DestructiveActionAlertState: Identifiable, Equatable {
2930
public let id = UUID()
3031
public let type: DestructiveActionAlertType
31-
public let impactedMessages: Int?
3232
public let completion: () async -> Void
3333

34-
public init(type: DestructiveActionAlertType, impactedMessages: Int? = nil, completion: @escaping () async -> Void) {
34+
public init(type: DestructiveActionAlertType, completion: @escaping () async -> Void) {
3535
self.type = type
36-
self.impactedMessages = impactedMessages
3736
self.completion = completion
3837
}
3938

0 commit comments

Comments
 (0)