diff --git a/Mail/Views/Alerts/DetachMailboxConfirmationView.swift b/Mail/Views/Alerts/DetachMailboxConfirmationView.swift new file mode 100644 index 000000000..a96053f14 --- /dev/null +++ b/Mail/Views/Alerts/DetachMailboxConfirmationView.swift @@ -0,0 +1,72 @@ +/* + Infomaniak Mail - iOS App + Copyright (C) 2022 Infomaniak Network SA + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +import InfomaniakCoreUI +import InfomaniakDI +import MailCore +import MailResources +import SwiftUI + +struct DetachMailboxConfirmationView: View { + @EnvironmentObject private var navigationState: NavigationState + + let mailbox: Mailbox + + var body: some View { + VStack(alignment: .leading, spacing: 24) { + Text(MailResourcesStrings.Localizable.popupDetachMailboxTitle) + .textStyle(.bodyMedium) + Text(attributedString()) + .textStyle(.bodySecondary) + ModalButtonsView(primaryButtonTitle: MailResourcesStrings.Localizable.buttonConfirm, primaryButtonAction: detach) + } + } + + func attributedString() -> AttributedString { + do { + var text = try AttributedString(markdown: MailResourcesStrings.Localizable + .popupDetachMailboxDescription("**\(mailbox.email)**")) + + if let range = text.range(of: mailbox.email) { + text[range].foregroundColor = MailResourcesAsset.textPrimaryColor.swiftUIColor + } + + return text + } catch { + return "" + } + } + + private func detach() { + @InjectService var matomo: MatomoUtils + matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "detachMailboxConfirm") + + Task { + await tryOrDisplayError { + try await AccountManager.instance.detachMailbox(mailbox: mailbox) + navigationState.transitionToRootViewDestination(.mainView) + } + } + } +} + +struct DetachMailboxConfirmationView_Previews: PreviewProvider { + static var previews: some View { + DetachMailboxConfirmationView(mailbox: PreviewHelper.sampleMailbox) + } +} diff --git a/Mail/Views/Switch User/AddMailboxView.swift b/Mail/Views/Switch User/AddMailboxView.swift index 086799896..bf4aa90df 100644 --- a/Mail/Views/Switch User/AddMailboxView.swift +++ b/Mail/Views/Switch User/AddMailboxView.swift @@ -53,7 +53,7 @@ struct AddMailboxView: View { } .padding(.bottom, 4) - Text(MailResourcesStrings.Localizable.errorAttachAddressInput) + Text(MailResourcesStrings.Localizable.attachAddressInputHelper) .textStyle(showError ? .labelError : .labelSecondary) .padding(.bottom, 8) diff --git a/Mail/Views/Unavailable Mailbox/UpdateMailboxPasswordView.swift b/Mail/Views/Unavailable Mailbox/UpdateMailboxPasswordView.swift index 53241c03b..281bccc7d 100644 --- a/Mail/Views/Unavailable Mailbox/UpdateMailboxPasswordView.swift +++ b/Mail/Views/Unavailable Mailbox/UpdateMailboxPasswordView.swift @@ -30,13 +30,14 @@ struct UpdateMailboxPasswordView: View { @State private var updatedMailboxPassword = "" @State private var isShowingError = false @State private var isLoading = false + @State private var isShowingDetachMailboxAlertView = false private var disableButton: Bool { return isLoading || showPasswordLengthWarning } private var showPasswordLengthWarning: Bool { - return !updatedMailboxPassword.isEmpty && (updatedMailboxPassword.count < 5 || updatedMailboxPassword.count > 80) + return updatedMailboxPassword.count < 5 || updatedMailboxPassword.count > 80 } let mailbox: Mailbox @@ -49,7 +50,7 @@ struct UpdateMailboxPasswordView: View { .textStyle(.bodySecondary) MailButton(label: MailResourcesStrings.Localizable.buttonDetachMailbox) { matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "detachMailbox") - detachAddress() + isShowingDetachMailboxAlertView = true } .mailButtonStyle(.link) .disabled(isLoading) @@ -84,7 +85,7 @@ struct UpdateMailboxPasswordView: View { updateMailboxPassword() } .mailButtonFullWidth(true) - .disabled(isLoading) + .disabled(disableButton) MailButton(label: MailResourcesStrings.Localizable.buttonPasswordForgotten) { // Empty for now, WIP @@ -95,11 +96,19 @@ struct UpdateMailboxPasswordView: View { Spacer() } + .onChange(of: updatedMailboxPassword) { newValue in + if !newValue.isEmpty { + isShowingError = false + } + } .padding() .navigationBarTitleDisplayMode(.inline) .navigationTitle(MailResourcesStrings.Localizable.enterPasswordTitle) .sheetViewStyle() .matomoView(view: ["UpdateMailboxPasswordView"]) + .customAlert(isPresented: $isShowingDetachMailboxAlertView) { + DetachMailboxConfirmationView(mailbox: mailbox) + } } func updateMailboxPassword() { @@ -110,19 +119,7 @@ struct UpdateMailboxPasswordView: View { navigationState.transitionToRootViewDestination(.mainView) } catch { isShowingError = true - } - isLoading = false - } - } - - func detachAddress() { - Task { - isLoading = true - do { - try await AccountManager.instance.detachMailbox(mailbox: mailbox) - navigationState.transitionToRootViewDestination(.mainView) - } catch { - isShowingError = true + updatedMailboxPassword = "" } isLoading = false } diff --git a/MailResources/Localizable/de.lproj/Localizable.strings b/MailResources/Localizable/de.lproj/Localizable.strings index f587a75e9..67a85dc70 100644 Binary files a/MailResources/Localizable/de.lproj/Localizable.strings and b/MailResources/Localizable/de.lproj/Localizable.strings differ diff --git a/MailResources/Localizable/en.lproj/Localizable.strings b/MailResources/Localizable/en.lproj/Localizable.strings index 0ece2aa29..6332113cb 100644 Binary files a/MailResources/Localizable/en.lproj/Localizable.strings and b/MailResources/Localizable/en.lproj/Localizable.strings differ diff --git a/MailResources/Localizable/es.lproj/Localizable.strings b/MailResources/Localizable/es.lproj/Localizable.strings index 4954a19da..f41935b50 100644 Binary files a/MailResources/Localizable/es.lproj/Localizable.strings and b/MailResources/Localizable/es.lproj/Localizable.strings differ diff --git a/MailResources/Localizable/fr.lproj/Localizable.strings b/MailResources/Localizable/fr.lproj/Localizable.strings index 57ad5296b..344ae5e52 100644 Binary files a/MailResources/Localizable/fr.lproj/Localizable.strings and b/MailResources/Localizable/fr.lproj/Localizable.strings differ diff --git a/MailResources/Localizable/it.lproj/Localizable.strings b/MailResources/Localizable/it.lproj/Localizable.strings index c6c708c8c..d2e2c501a 100644 Binary files a/MailResources/Localizable/it.lproj/Localizable.strings and b/MailResources/Localizable/it.lproj/Localizable.strings differ