diff --git a/Sources/AppResources/Resources/en.lproj/Localizable.strings b/Sources/AppResources/Resources/en.lproj/Localizable.strings index 4bf92d9d2a6c07afc0d531d0ce18ca95b7da617b..6263b3247e6477b738e97ae78277c500e987a927 100644 --- a/Sources/AppResources/Resources/en.lproj/Localizable.strings +++ b/Sources/AppResources/Resources/en.lproj/Localizable.strings @@ -812,7 +812,7 @@ "onboarding.emailConfirmation.title" = "Please enter the #code# sent to your email."; "onboarding.emailConfirmation.subtitle" -= "We sent a verification code to %@."; += "We sent a verification code to %@"; "onboarding.emailConfirmation.input" = "Code"; "onboarding.emailConfirmation.next" @@ -846,7 +846,7 @@ "onboarding.phoneConfirmation.title" = "Please enter the #code# sent to your phone through #SMS#."; "onboarding.phoneConfirmation.subtitle" -= "We sent a verification code to %@."; += "We sent a verification code to %@"; "onboarding.phoneConfirmation.input" = "Code"; "onboarding.phoneConfirmation.next" diff --git a/Sources/AppResources/Strings.swift b/Sources/AppResources/Strings.swift index 0925582807aa61bf988a83890180a25dc9eb324b..a2b35b00bdcb9ba9328a5fe27ff45b9c74c425a5 100644 --- a/Sources/AppResources/Strings.swift +++ b/Sources/AppResources/Strings.swift @@ -731,7 +731,7 @@ public enum Localized { public static func resend(_ p1: Any) -> String { return Localized.tr("Localizable", "onboarding.emailConfirmation.resend", String(describing: p1)) } - /// We sent a verification code to %@. + /// We sent a verification code to %@ public static func subtitle(_ p1: Any) -> String { return Localized.tr("Localizable", "onboarding.emailConfirmation.subtitle", String(describing: p1)) } @@ -771,7 +771,7 @@ public enum Localized { public static func resend(_ p1: Any) -> String { return Localized.tr("Localizable", "onboarding.phoneConfirmation.resend", String(describing: p1)) } - /// We sent a verification code to %@. + /// We sent a verification code to %@ public static func subtitle(_ p1: Any) -> String { return Localized.tr("Localizable", "onboarding.phoneConfirmation.subtitle", String(describing: p1)) } diff --git a/Sources/OnboardingFeature/Controllers/OnboardingCodeController.swift b/Sources/OnboardingFeature/Controllers/OnboardingCodeController.swift index 8fd333cbdb11af72c101f78dbdcd67a7d407b83c..4075ad2cd4e26a62fb5de329b47c00dc27aae823 100644 --- a/Sources/OnboardingFeature/Controllers/OnboardingCodeController.swift +++ b/Sources/OnboardingFeature/Controllers/OnboardingCodeController.swift @@ -6,6 +6,7 @@ import AppResources import Dependencies import AppNavigation import DrawerFeature +import CountryListFeature import ScrollViewController public final class OnboardingCodeController: UIViewController { @@ -53,7 +54,9 @@ public final class OnboardingCodeController: UIViewController { screenView.setupSubtitle( isEmail ? Localized.Onboarding.EmailConfirmation.subtitle(content) : - Localized.Onboarding.PhoneConfirmation.subtitle(content) + Localized.Onboarding.PhoneConfirmation.subtitle( + "\(Country.findFrom(content).prefix)\(content.dropLast(2))" + ) ) screenView.didTapInfo = { [weak self] in diff --git a/Sources/OnboardingFeature/ViewModels/OnboardingCodeViewModel.swift b/Sources/OnboardingFeature/ViewModels/OnboardingCodeViewModel.swift index 570edad96cbccdc21520d50846c3edb16e467656..66f497f7258d9f394f5dc5cb3303800585ef8e3b 100644 --- a/Sources/OnboardingFeature/ViewModels/OnboardingCodeViewModel.swift +++ b/Sources/OnboardingFeature/ViewModels/OnboardingCodeViewModel.swift @@ -31,7 +31,7 @@ final class OnboardingCodeViewModel { private var timer: Timer? private let isEmail: Bool private let content: String - private let confirmationId: String + private var confirmationId: String private let stateSubject = CurrentValueSubject<ViewState, Never>(.init()) init( @@ -60,6 +60,18 @@ final class OnboardingCodeViewModel { } self.stateSubject.value.resendDebouncer -= 1 } + bgQueue.schedule { [weak self] in + guard let self else { return } + do { + self.confirmationId = try self.messenger.ud.tryGet() + .sendRegisterFact(.init( + type: self.isEmail ? .email : .phone, + value: self.content + )) + } catch { + self.hudManager.show(.init(error: error)) + } + } } func didTapNext() { @@ -67,7 +79,7 @@ final class OnboardingCodeViewModel { bgQueue.schedule { [weak self] in guard let self else { return } do { - try self.messenger.ud.get()!.confirmFact( + try self.messenger.ud.tryGet().confirmFact( confirmationId: self.confirmationId, code: self.stateSubject.value.input ) diff --git a/Sources/OnboardingFeature/ViewModels/OnboardingEmailViewModel.swift b/Sources/OnboardingFeature/ViewModels/OnboardingEmailViewModel.swift index 0af88c771abde62acfec00e6b1f7220e6bbff82c..bcfdbdaa967ee2bfcef9b6f5be581e4386b32c1e 100644 --- a/Sources/OnboardingFeature/ViewModels/OnboardingEmailViewModel.swift +++ b/Sources/OnboardingFeature/ViewModels/OnboardingEmailViewModel.swift @@ -39,8 +39,11 @@ final class OnboardingEmailViewModel { bgQueue.schedule { [weak self] in guard let self else { return } do { - let confirmationId = try self.messenger.ud.get()!.sendRegisterFact( - .init(type: .email, value: self.stateSubject.value.input) + let confirmationId = try self.messenger.ud.tryGet() + .sendRegisterFact(.init( + type: .email, + value: self.stateSubject.value.input + ) ) self.hudManager.hide() self.stateSubject.value.confirmationId = confirmationId diff --git a/Sources/OnboardingFeature/ViewModels/OnboardingPhoneViewModel.swift b/Sources/OnboardingFeature/ViewModels/OnboardingPhoneViewModel.swift index 5fa427fbab976ea59e1c7c56abb3ecc28dd673d3..2787b483b2f05b5587a7fb4297c1ecab192c69a6 100644 --- a/Sources/OnboardingFeature/ViewModels/OnboardingPhoneViewModel.swift +++ b/Sources/OnboardingFeature/ViewModels/OnboardingPhoneViewModel.swift @@ -48,8 +48,11 @@ final class OnboardingPhoneViewModel { guard let self else { return } let content = "\(self.stateSubject.value.input)\(self.stateSubject.value.country.code)" do { - let confirmationId = try self.messenger.ud.get()!.sendRegisterFact( - .init(type: .phone, value: content) + let confirmationId = try self.messenger.ud.tryGet() + .sendRegisterFact(.init( + type: .phone, + value: content + ) ) self.hudManager.hide() self.stateSubject.value.content = content diff --git a/Sources/ProfileFeature/ViewModels/ProfileCodeViewModel.swift b/Sources/ProfileFeature/ViewModels/ProfileCodeViewModel.swift index 804dfa78043ca097082f6c6a6b0fc45a1ff38911..3e46701273b180c4876e0afe257d9d279c3897d1 100644 --- a/Sources/ProfileFeature/ViewModels/ProfileCodeViewModel.swift +++ b/Sources/ProfileFeature/ViewModels/ProfileCodeViewModel.swift @@ -30,7 +30,7 @@ final class ProfileCodeViewModel { private var timer: Timer? private let isEmail: Bool private let content: String - private let confirmationId: String + private var confirmationId: String private let stateSubject = CurrentValueSubject<ViewState, Never>(.init()) init( @@ -59,6 +59,18 @@ final class ProfileCodeViewModel { } self.stateSubject.value.resendDebouncer -= 1 } + bgQueue.schedule { [weak self] in + guard let self else { return } + do { + self.confirmationId = try self.messenger.ud.tryGet() + .sendRegisterFact(.init( + type: self.isEmail ? .email : .phone, + value: self.content + )) + } catch { + self.hudManager.show(.init(error: error)) + } + } } func didTapNext() { @@ -66,7 +78,7 @@ final class ProfileCodeViewModel { bgQueue.schedule { [weak self] in guard let self else { return } do { - try self.messenger.ud.get()!.confirmFact( + try self.messenger.ud.tryGet().confirmFact( confirmationId: self.confirmationId, code: self.stateSubject.value.input ) diff --git a/Sources/ProfileFeature/ViewModels/ProfileEmailViewModel.swift b/Sources/ProfileFeature/ViewModels/ProfileEmailViewModel.swift index 01d93e61791c15671cec5272088bbe21628b304a..a71210c35c065ccc7d7fb492c9f9b7361b851f03 100644 --- a/Sources/ProfileFeature/ViewModels/ProfileEmailViewModel.swift +++ b/Sources/ProfileFeature/ViewModels/ProfileEmailViewModel.swift @@ -39,8 +39,11 @@ final class ProfileEmailViewModel { bgQueue.schedule { [weak self] in guard let self else { return } do { - let confirmationId = try self.messenger.ud.get()!.sendRegisterFact( - .init(type: .email, value: self.stateSubject.value.input) + let confirmationId = try self.messenger.ud.tryGet() + .sendRegisterFact(.init( + type: .email, + value: self.stateSubject.value.input + ) ) self.hudManager.hide() self.stateSubject.value.confirmationId = confirmationId diff --git a/Sources/ProfileFeature/ViewModels/ProfilePhoneViewModel.swift b/Sources/ProfileFeature/ViewModels/ProfilePhoneViewModel.swift index 02c0d7546244200437ca8f016a51a1506bee6ebd..b5749cea59afd61e86bd21230f6240c5674c099b 100644 --- a/Sources/ProfileFeature/ViewModels/ProfilePhoneViewModel.swift +++ b/Sources/ProfileFeature/ViewModels/ProfilePhoneViewModel.swift @@ -48,10 +48,12 @@ final class ProfilePhoneViewModel { guard let self else { return } let content = "\(self.stateSubject.value.input)\(self.stateSubject.value.country.code)" do { - let confirmationId = try self.messenger.ud.get()!.sendRegisterFact( - .init(type: .phone, value: content) + let confirmationId = try self.messenger.ud.tryGet() + .sendRegisterFact(.init( + type: .phone, + value: content + ) ) - self.hudManager.hide() self.stateSubject.value.content = content self.stateSubject.value.confirmationId = confirmationId diff --git a/Sources/ProfileFeature/ViewModels/ProfileViewModel.swift b/Sources/ProfileFeature/ViewModels/ProfileViewModel.swift index 4d8e382e75e0524549f6c4528cd451b1b92ec34a..60cddb5d016da02b953722880b9a5e5c443dfdfd 100644 --- a/Sources/ProfileFeature/ViewModels/ProfileViewModel.swift +++ b/Sources/ProfileFeature/ViewModels/ProfileViewModel.swift @@ -91,7 +91,7 @@ final class ProfileViewModel { bgQueue.schedule { [weak self] in guard let self else { return } do { - try self.messenger.ud.get()!.removeFact( + try self.messenger.ud.tryGet().removeFact( .init( type: isEmail ? .email : .phone, value: isEmail ? self.emailStored! : self.phoneStored!