From 91a2fd97799d2e8ee1a4361346cf375af263043b Mon Sep 17 00:00:00 2001 From: danieljohannsson Date: Thu, 1 Aug 2024 15:23:21 +0200 Subject: [PATCH 1/8] Removed DK and NO --- .../Flags/FlagDK.imageset/Contents.json | 15 ------------ .../Flags/FlagDK.imageset/Denmark.svg | 14 ----------- .../Flags/FlagNO.imageset/Contents.json | 15 ------------ .../Flags/FlagNO.imageset/Norway.svg | 24 ------------------- 4 files changed, 68 deletions(-) delete mode 100644 Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Contents.json delete mode 100644 Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Denmark.svg delete mode 100644 Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Contents.json delete mode 100644 Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Norway.svg diff --git a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Contents.json b/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Contents.json deleted file mode 100644 index aeb1c51b47..0000000000 --- a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "filename" : "Denmark.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Denmark.svg b/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Denmark.svg deleted file mode 100644 index bedeed4510..0000000000 --- a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagDK.imageset/Denmark.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Contents.json b/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Contents.json deleted file mode 100644 index a40f6f36c9..0000000000 --- a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { - "filename" : "Norway.svg", - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "preserves-vector-representation" : true - } -} diff --git a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Norway.svg b/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Norway.svg deleted file mode 100644 index 6ff07c26ec..0000000000 --- a/Projects/hCoreUI/Resources/Assets.xcassets/Flags/FlagNO.imageset/Norway.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - From fd66220b478ef22395c96a7606d2dee8ac17fb45 Mon Sep 17 00:00:00 2001 From: danieljohannsson Date: Thu, 1 Aug 2024 15:23:36 +0200 Subject: [PATCH 2/8] Removed DK and NO --- .../Sources/Journeys/LoginNavigation.swift | 36 +++----- .../Sources/OTP/OTPEntryView.swift | 6 -- .../AuthenticationClientAuthLib.swift | 6 -- .../Sources/Models/ContractModels.swift | 60 ------------- .../Sources/LanguageAndMarketPickerView.swift | 86 ++++++++----------- Projects/Market/Sources/Market.swift | 16 +--- .../Sources/View/MovingFlowConfirm.swift | 2 +- .../Sources/View/MovingFlowHouseView.swift | 2 +- .../Sources/View/MovingFlowHousingType.swift | 2 +- Projects/hCore/Sources/Localization.swift | 37 -------- Projects/hCore/Sources/Masking.swift | 33 +------ Projects/hCore/Sources/MonetaryAmount.swift | 4 - .../Sources/Localization.Locale+Icon.swift | 6 +- .../Project+DependenciesTemplate.swift | 2 +- 14 files changed, 59 insertions(+), 239 deletions(-) diff --git a/Projects/App/Sources/Journeys/LoginNavigation.swift b/Projects/App/Sources/Journeys/LoginNavigation.swift index 006e5bf8ad..5ada42f06d 100644 --- a/Projects/App/Sources/Journeys/LoginNavigation.swift +++ b/Projects/App/Sources/Journeys/LoginNavigation.swift @@ -19,16 +19,14 @@ struct LoginNavigation: View { NotLoggedInView(vm: vm) } .detent(presented: $vm.showLanguagePicker, style: .height) { - LanguageAndMarketPickerView() - .navigationTitle(L10n.loginMarketPickerPreferences) + LanguagePickerView() + .navigationTitle(L10n.loginLanguagePreferences) .embededInNavigation() } .detent(presented: $vm.showLogin, style: .large, tracking: Localization.Locale.currentLocale.market) { Group { switch Localization.Locale.currentLocale.market { - case .no, .dk: - OTPEntryView() case .se: BankIDLoginQRView { let store: UgglanStore = globalPresentableStoreContainer.get() @@ -74,8 +72,8 @@ public struct NotLoggedInView: View { switch vm.viewState { case .loading: ZStack {} - case .marketAndLanguage: - marketAndLanguage + case .language: + language } } .environment(\.colorScheme, .light) @@ -86,24 +84,16 @@ public struct NotLoggedInView: View { } @ViewBuilder - var marketAndLanguage: some View { + var language: some View { ZStack { VStack { HStack { Spacer() - PresentableStoreLens( - MarketStore.self, - getter: { state in - state.market - } - ) { market in - Button { - vm.showLanguagePicker = true - } label: { - Image(uiImage: market.icon) - .padding(.padding8) - } - + Button { + vm.showLanguagePicker = true + } label: { + Image(uiImage: Localization.Locale.currentLocale.icon) + .padding(.padding8) } } @@ -165,7 +155,7 @@ public class NotLoggedViewModel: ObservableObject { .receive(on: RunLoop.main) .sink { [weak self] value in if value { - self?.viewState = .marketAndLanguage + self?.viewState = .language self?.onLoad() } } @@ -203,7 +193,7 @@ public class NotLoggedViewModel: ObservableObject { enum ViewState { case loading - case marketAndLanguage + case language } } @@ -305,8 +295,6 @@ private class PlayerUIView: UIView { extension Localization.Locale.Market: TrackingViewNameProtocol { public var nameForTracking: String { switch self { - case .no, .dk: - return .init(describing: OTPEntryView.self) case .se: return .init(describing: BankIDLoginQRView.self) diff --git a/Projects/Authentication/Sources/OTP/OTPEntryView.swift b/Projects/Authentication/Sources/OTP/OTPEntryView.swift index 01779fd1dd..ef9a646135 100644 --- a/Projects/Authentication/Sources/OTP/OTPEntryView.swift +++ b/Projects/Authentication/Sources/OTP/OTPEntryView.swift @@ -53,10 +53,6 @@ class OTPEntryViewModel: ObservableObject { weak var router: Router? var masking: Masking { switch Localization.Locale.currentLocale.market { - case .dk: - return Masking(type: .danishPersonalNumber) - case .no: - return Masking(type: .norwegianPersonalNumber) case .se: return Masking(type: .email) } @@ -64,8 +60,6 @@ class OTPEntryViewModel: ObservableObject { var title: String { switch Localization.Locale.currentLocale.market { - case .dk, .no: - return L10n.zignsecLoginScreenTitle case .se: return L10n.Login.enterYourEmailAddress } diff --git a/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift b/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift index a118a30162..65998d98cd 100644 --- a/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift +++ b/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift @@ -80,8 +80,6 @@ final public class AuthenticationClientAuthLib: AuthenticationClient { public func start(with otpState: OTPState) async throws -> (verifyUrl: URL, resendUrl: URL, maskedEmail: String?) { let personalNumber: String? = { switch Localization.Locale.currentLocale.market { - case .no, .dk: - return otpState.input.replacingOccurrences(of: "-", with: "") case .se: return nil } @@ -89,8 +87,6 @@ final public class AuthenticationClientAuthLib: AuthenticationClient { let email: String? = { switch Localization.Locale.currentLocale.market { - case .no, .dk: - return nil case .se: return otpState.input } @@ -285,9 +281,7 @@ extension hGraphQL.Environment { extension Localization.Locale.Market { fileprivate var asOtpMarket: OtpMarket { switch self { - case .no: return .no case .se: return .se - case .dk: return .dk } } } diff --git a/Projects/Contracts/Sources/Models/ContractModels.swift b/Projects/Contracts/Sources/Models/ContractModels.swift index 208e0a2d87..5acaf71541 100644 --- a/Projects/Contracts/Sources/Models/ContractModels.swift +++ b/Projects/Contracts/Sources/Models/ContractModels.swift @@ -274,26 +274,6 @@ public struct Contract: Codable, Hashable, Equatable, Identifiable { case seCatBasic = "SE_CAT_BASIC" case seCatStandard = "SE_CAT_STANDARD" case seCatPremium = "SE_CAT_PREMIUM" - case noHouse = "NO_HOUSE" - case noHomeContentOwn = "NO_HOME_CONTENT_OWN" - case noHomeContentRent = "NO_HOME_CONTENT_RENT" - case noHomeContentYouthOwn = "NO_HOME_CONTENT_YOUTH_OWN" - case noHomeContentYouthRent = "NO_HOME_CONTENT_YOUTH_RENT" - case noHomeContentStudentOwn = "NO_HOME_CONTENT_STUDENT_OWN" - case noHomeContentStudentRent = "NO_HOME_CONTENT_STUDENT_RENT" - case noTravel = "NO_TRAVEL" - case noTravelYouth = "NO_TRAVEL_YOUTH" - case noTravelStudent = "NO_TRAVEL_STUDENT" - case noAccident = "NO_ACCIDENT" - case dkHomeContentOwn = "DK_HOME_CONTENT_OWN" - case dkHomeContentRent = "DK_HOME_CONTENT_RENT" - case dkHomeContentStudentOwn = "DK_HOME_CONTENT_STUDENT_OWN" - case dkHomeContentStudentRent = "DK_HOME_CONTENT_STUDENT_RENT" - case dkHouse = "DK_HOUSE" - case dkAccident = "DK_ACCIDENT" - case dkAccidentStudent = "DK_ACCIDENT_STUDENT" - case dkTravel = "DK_TRAVEL" - case dkTravelStudent = "DK_TRAVEL_STUDENT" case unknown = "UNKNOWN" static func resolve(for typeOfContract: String) -> Self { @@ -367,46 +347,6 @@ extension Contract.TypeOfContract { return .cat case .seCatPremium: return .cat - case .noHouse: - return .villa - case .noHomeContentOwn: - return .homeOwner - case .noHomeContentRent: - return .rental - case .noHomeContentYouthOwn: - return .homeOwner - case .noHomeContentYouthRent: - return .rental - case .noHomeContentStudentOwn: - return .student - case .noHomeContentStudentRent: - return .student - case .noTravel: - return .travel - case .noTravelYouth: - return .travel - case .noTravelStudent: - return .travel - case .noAccident: - return .accident - case .dkHomeContentOwn: - return .homeOwner - case .dkHomeContentRent: - return .rental - case .dkHomeContentStudentOwn: - return .homeOwner - case .dkHomeContentStudentRent: - return .rental - case .dkHouse: - return .villa - case .dkAccident: - return .accident - case .dkAccidentStudent: - return .accident - case .dkTravel: - return .travel - case .dkTravelStudent: - return .travel case .unknown: return .unknown } diff --git a/Projects/Market/Sources/LanguageAndMarketPickerView.swift b/Projects/Market/Sources/LanguageAndMarketPickerView.swift index 89cd89e288..83b87a1f3f 100644 --- a/Projects/Market/Sources/LanguageAndMarketPickerView.swift +++ b/Projects/Market/Sources/LanguageAndMarketPickerView.swift @@ -4,8 +4,8 @@ import SwiftUI import hCore import hCoreUI -public struct LanguageAndMarketPickerView: View { - @StateObject private var vm = LanguageAndMarketPickerViewModel() +public struct LanguagePickerView: View { + @StateObject private var vm = LanguagePickerViewModel() @EnvironmentObject var router: Router public init() {} @@ -13,17 +13,7 @@ public struct LanguageAndMarketPickerView: View { public var body: some View { hForm { VStack(spacing: 8) { - hSection { - Picker("View", selection: $vm.selected) { - ForEach(LanguageAndMarketPicker.allCases) { view in - hText(view.title, style: .standardSmall).tag(view) - } - } - .pickerStyle(.segmented) - } - .sectionContainerStyle(.transparent) - - ForEach(LanguageAndMarketPicker.allCases) { panel in + ForEach(LanguagePicker.allCases) { panel in if vm.selected == panel { withAnimation(.easeInOut(duration: 0.4)) { viewFor(view: panel) @@ -64,37 +54,37 @@ public struct LanguageAndMarketPickerView: View { } @ViewBuilder - func viewFor(view: LanguageAndMarketPicker) -> some View { + func viewFor(view: LanguagePicker) -> some View { switch view { - case .market: - marketView + // case .market: + // marketView case .language: languageView } } - private var marketView: some View { - hSection { - VStack(spacing: 4) { - ForEach(Market.activatedMarkets, id: \.title) { market in - hRadioField( - id: market.rawValue, - leftView: { - HStack(spacing: 16) { - Image(uiImage: market.icon) - .resizable() - .frame(width: 24, height: 24) - hText(market.title, style: .title3) - .foregroundColor(hTextColor.Opaque.primary) - } - .asAnyView - }, - selected: $vm.selectedMarketCode - ) - } - } - } - } + // private var marketView: some View { + // hSection { + // VStack(spacing: 4) { + // ForEach(Market.activatedMarkets, id: \.title) { market in + // hRadioField( + // id: market.rawValue, + // leftView: { + // HStack(spacing: 16) { + // Image(uiImage: market.icon) + // .resizable() + // .frame(width: 24, height: 24) + // hText(market.title, style: .title3) + // .foregroundColor(hTextColor.Opaque.primary) + // } + // .asAnyView + // }, + // selected: $vm.selectedMarketCode + // ) + // } + // } + // } + // } private var languageView: some View { hSection { @@ -120,27 +110,27 @@ public struct LanguageAndMarketPickerView: View { } } -struct LanguageAndMarketPickerView_Previews: PreviewProvider { +struct LanguagePickerView_Previews: PreviewProvider { static var previews: some View { - LanguageAndMarketPickerView() + LanguagePickerView() } } -class LanguageAndMarketPickerViewModel: ObservableObject { +class LanguagePickerViewModel: ObservableObject { @Published var selectedLocale = Localization.Locale.currentLocale @Published var selectedLocaleCode: String? = Localization.Locale.currentLocale.rawValue @Published var selectedMarket: Market @Published var selectedMarketCode: String? - @Published var trigger = LanguageAndMarketPicker.language - @Published var previous = LanguageAndMarketPicker.language + @Published var trigger = LanguagePicker.language + @Published var previous = LanguagePicker.language @Published var insertion: AnyTransition = .move(edge: .leading) @Published var removal: AnyTransition = .move(edge: .trailing) var cancellables = Set() - @Published var selected: LanguageAndMarketPicker = .market { + @Published var selected: LanguagePicker = .language { willSet { if previous != selected { insertion = previous.move(selected) @@ -185,22 +175,20 @@ class LanguageAndMarketPickerViewModel: ObservableObject { } } -enum LanguageAndMarketPicker: Int, CaseIterable, Identifiable { - case market +enum LanguagePicker: Int, CaseIterable, Identifiable { + // case market case language var id: Int { self.rawValue } var title: String { switch self { - case .market: - return L10n.MarketPickerModal.title case .language: return L10n.LanguagePickerModal.title } } - func move(_ otherPanel: LanguageAndMarketPicker) -> AnyTransition { + func move(_ otherPanel: LanguagePicker) -> AnyTransition { return otherPanel.rawValue < self.rawValue ? .move(edge: .trailing) : .move(edge: .leading) } } diff --git a/Projects/Market/Sources/Market.swift b/Projects/Market/Sources/Market.swift index 75157052e0..775c2d008a 100644 --- a/Projects/Market/Sources/Market.swift +++ b/Projects/Market/Sources/Market.swift @@ -6,43 +6,33 @@ import hGraphQL public enum Market: String, CaseIterable, Codable { case sweden = "SE" - case norway = "NO" - case denmark = "DK" var id: String { switch self { - case .norway: return "no" case .sweden: return "se" - case .denmark: return "dk" } } public var title: String { switch self { - case .norway: return L10n.marketNorway case .sweden: return L10n.marketSweden - case .denmark: return L10n.marketDenmark } } public var icon: UIImage { switch self { - case .norway: return hCoreUIAssets.flagNO.image case .sweden: return hCoreUIAssets.flagSE.image - case .denmark: return hCoreUIAssets.flagDK.image } } static var activatedMarkets: [Market] { - let activatedMarkets: [Market] = [.denmark, .sweden, .norway] + let activatedMarkets: [Market] = [.sweden] return activatedMarkets } var languages: [Localization.Locale] { switch self { - case .norway: return [.nb_NO, .en_NO] case .sweden: return [.sv_SE, .en_SE] - case .denmark: return [.da_DK, .en_DK] } } @@ -60,9 +50,7 @@ public enum Market: String, CaseIterable, Codable { static func fromLocalization(_ market: Localization.Locale.Market) -> Self { switch market { - case .dk: return .denmark case .se: return .sweden - case .no: return .norway } } @@ -70,8 +58,6 @@ public enum Market: String, CaseIterable, Codable { switch self { case .sweden: return true - case .norway, .denmark: - return false } } } diff --git a/Projects/MoveFlow/Sources/View/MovingFlowConfirm.swift b/Projects/MoveFlow/Sources/View/MovingFlowConfirm.swift index c8044a14e9..bddfe2cf90 100644 --- a/Projects/MoveFlow/Sources/View/MovingFlowConfirm.swift +++ b/Projects/MoveFlow/Sources/View/MovingFlowConfirm.swift @@ -343,7 +343,7 @@ public struct FieldInfo: Hashable, Equatable, Codable { struct MovingFlowConfirm_Previews: PreviewProvider { static var previews: some View { - Localization.Locale.currentLocale = .nb_NO + Localization.Locale.currentLocale = .sv_SE return MovingFlowConfirm() .onAppear { let store: MoveFlowStore = globalPresentableStoreContainer.get() diff --git a/Projects/MoveFlow/Sources/View/MovingFlowHouseView.swift b/Projects/MoveFlow/Sources/View/MovingFlowHouseView.swift index f9ea3f9d67..6d26cfcadd 100644 --- a/Projects/MoveFlow/Sources/View/MovingFlowHouseView.swift +++ b/Projects/MoveFlow/Sources/View/MovingFlowHouseView.swift @@ -176,7 +176,7 @@ struct MovingFlowHouseView: View { struct MovingFlowHouseView_Previews: PreviewProvider { static var previews: some View { - Localization.Locale.currentLocale = .nb_NO + Localization.Locale.currentLocale = .sv_SE return MovingFlowHouseView(vm: HouseInformationInputModel()) } } diff --git a/Projects/MoveFlow/Sources/View/MovingFlowHousingType.swift b/Projects/MoveFlow/Sources/View/MovingFlowHousingType.swift index 0c5d1cdd98..4e7b24fe9b 100644 --- a/Projects/MoveFlow/Sources/View/MovingFlowHousingType.swift +++ b/Projects/MoveFlow/Sources/View/MovingFlowHousingType.swift @@ -84,7 +84,7 @@ public struct MovingFlowHousingTypeView: View { struct MovingFlowTypeOfHome_Previews: PreviewProvider { static var previews: some View { - Localization.Locale.currentLocale = .nb_NO + Localization.Locale.currentLocale = .sv_SE return MovingFlowHousingTypeView() } } diff --git a/Projects/hCore/Sources/Localization.swift b/Projects/hCore/Sources/Localization.swift index a67663e8e4..c3d81423ed 100644 --- a/Projects/hCore/Sources/Localization.swift +++ b/Projects/hCore/Sources/Localization.swift @@ -6,37 +6,25 @@ public enum Localization { @ReadWriteState public static var currentLocale: Locale = .sv_SE case sv_SE case en_SE - case en_NO - case nb_NO - case da_DK - case en_DK public enum Market: String, Codable, CaseIterable { - case no = "NO" case se = "SE" - case dk = "DK" public var currencyCode: String { switch self { - case .no: return "NOK" - case .dk: return "DKK" case .se: return "SEK" } } public var availableLocales: [Localization.Locale] { switch self { - case .no: return [.nb_NO, .en_NO] - case .dk: return [.da_DK, .en_DK] case .se: return [.sv_SE, .en_SE] } } public var marketName: String { switch self { - case .no: return L10n.marketNorway case .se: return L10n.marketSweden - case .dk: return L10n.marketDenmark } } } @@ -44,21 +32,13 @@ public enum Localization { public var market: Market { switch self { case .sv_SE, .en_SE: return .se - case .en_NO, .nb_NO: return .no - case .da_DK, .en_DK: return .dk } } - public var embark: Locale { .en_NO } - public var acceptLanguageHeader: String { switch self { case .sv_SE: return "sv-SE" case .en_SE: return "en-SE" - case .en_NO: return "en-NO" - case .nb_NO: return "nb-NO" - case .da_DK: return "da-DK" - case .en_DK: return "en-DK" } } @@ -66,10 +46,6 @@ public enum Localization { switch self { case .sv_SE: return "se" case .en_SE: return "se-en" - case .en_NO: return "no-en" - case .nb_NO: return "no" - case .da_DK: return "dk" - case .en_DK: return "dk-en" } } @@ -77,7 +53,6 @@ public enum Localization { switch self { case .sv_SE: return "forsakringar" case .en_SE: return "insurances" - default: return "new-member" } } @@ -85,10 +60,6 @@ public enum Localization { switch self { case .sv_SE: return "sv_SE" case .en_SE: return "en_SE" - case .en_NO: return "en_NO" - case .nb_NO: return "nb_NO" - case .da_DK: return "da_DK" - case .en_DK: return "en_DK" } } @@ -96,10 +67,6 @@ public enum Localization { switch self { case .sv_SE: return "Svenska" case .en_SE: return "English" - case .en_NO: return "English" - case .nb_NO: return "Norsk (Bokmål)" - case .da_DK: return "Dansk" - case .en_DK: return "English" } } @@ -109,10 +76,6 @@ public enum Localization { switch self { case .sv_SE: return "sv-SE" case .en_SE: return "en-SE" - case .en_NO: return "en-NO" - case .nb_NO: return "nb-NO" - case .da_DK: return "da-DK" - case .en_DK: return "en-DK" } } } diff --git a/Projects/hCore/Sources/Masking.swift b/Projects/hCore/Sources/Masking.swift index a5161cb96a..56b15fd823 100644 --- a/Projects/hCore/Sources/Masking.swift +++ b/Projects/hCore/Sources/Masking.swift @@ -6,14 +6,11 @@ public enum MaskType { case none case disabledSuggestion case personalNumber(minAge: Int) - case norwegianPersonalNumber - case danishPersonalNumber case postalCode case address case email case birthDate(minAge: Int) case birthDateCoInsured(minAge: Int) - case norwegianPostalCode case digits case euroBonus case fullName @@ -37,8 +34,6 @@ public struct Masking { public func isValid(text: String) -> Bool { switch type { - case .norwegianPersonalNumber: return text.replacingOccurrences(of: "-", with: "").count == 11 - case .danishPersonalNumber: return text.count == 11 case .personalNumber: let age = calculateAge(from: text) return text.replacingOccurrences(of: "-", with: "").count == 12 && age != nil && (age ?? 0) >= 0 @@ -52,7 +47,6 @@ public struct Masking { let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}" let emailPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegEx) return emailPredicate.evaluate(with: text) - case .norwegianPostalCode: return text.count == 4 case .postalCode: return unmask(text: text).count == 5 case .address: let addressRegEx = "[(A-Z|Å|Ä|Ö)a-zåäö]+(\\s*)+[0-9]*" @@ -78,8 +72,7 @@ public struct Masking { case .personalNumber: return text.replacingOccurrences(of: "-", with: "") case .postalCode: return text.replacingOccurrences(of: "\\s", with: "", options: .regularExpression) case .birthDate: return text - case .email, .norwegianPostalCode, .digits, .norwegianPersonalNumber: return text - case .danishPersonalNumber: return text.replacingOccurrences(of: "-", with: "") + case .email, .digits: return text case .none: return text case .address: return text.replacingOccurrences(of: "\\s", with: "", options: .regularExpression) case .disabledSuggestion: return text @@ -123,7 +116,6 @@ public struct Masking { let unmaskedValue = self.unmaskedValue(text: text) switch type { - case .danishPersonalNumber, .norwegianPersonalNumber: return nil case .personalNumber, .birthDateCoInsured: if let age = calculate("yyyyMMdd", value: String(unmaskedValue.prefix(8))) { return age } return nil @@ -143,9 +135,8 @@ public struct Masking { public var keyboardType: UIKeyboardType { switch type { - case .birthDate, .personalNumber, .norwegianPostalCode, - .postalCode, .digits, - .norwegianPersonalNumber, .danishPersonalNumber, .fullName, .birthDateCoInsured: + case .birthDate, .personalNumber, + .postalCode, .digits, .fullName, .birthDateCoInsured: return .numberPad case .email: return .emailAddress case .none: return .default @@ -178,18 +169,12 @@ public struct Masking { return nil case .personalNumber: return L10n.InsurelySeSsn.assistiveText - case .norwegianPersonalNumber: - return L10n.SimpleSignLogin.TextField.helperText - case .danishPersonalNumber: - return L10n.SimpleSignLogin.TextField.helperTextDk case .postalCode: return nil case .email: return L10n.emailPlaceholder case .birthDate, .birthDateCoInsured: return nil - case .norwegianPostalCode: - return nil case .digits: return nil case .address: @@ -213,18 +198,12 @@ public struct Masking { return nil case .personalNumber: return nil - case .norwegianPersonalNumber: - return L10n.SimpleSignLogin.TextField.label - case .danishPersonalNumber: - return L10n.SimpleSignLogin.TextField.labelDk case .postalCode: return nil case .email: return L10n.emailRowTitle case .birthDate, .birthDateCoInsured: return nil - case .norwegianPostalCode: - return nil case .digits: return nil case .address: @@ -322,15 +301,11 @@ public struct Masking { case .personalNumber: return delimitedDigits(delimiterPositions: [9], maxCount: 13, delimiter: "-") case .postalCode: return delimitedDigits(delimiterPositions: [4], maxCount: 6, delimiter: " ") - case .norwegianPostalCode: return delimitedDigits(delimiterPositions: [], maxCount: 4, delimiter: " ") + case .birthDate, .birthDateCoInsured: return delimitedDigits(delimiterPositions: [5, 8], maxCount: 10, delimiter: "-") case .digits: return text.filter { $0.isDigit } case .email: return text - case .norwegianPersonalNumber: - return delimitedDigits(delimiterPositions: [], maxCount: 11, delimiter: " ") - case .danishPersonalNumber: - return delimitedDigits(delimiterPositions: [7], maxCount: 11, delimiter: "-") case .none: return text case .address: return text case .disabledSuggestion: return text diff --git a/Projects/hCore/Sources/MonetaryAmount.swift b/Projects/hCore/Sources/MonetaryAmount.swift index 0a290ae30b..5b9ba0ff59 100644 --- a/Projects/hCore/Sources/MonetaryAmount.swift +++ b/Projects/hCore/Sources/MonetaryAmount.swift @@ -35,10 +35,6 @@ extension MonetaryAmount { switch currency { case "SEK": return Locale(identifier: "sv_SE") - case "NOK": - return Locale(identifier: "nb_NO") - case "DKK": - return Locale(identifier: "da_DK") default: return Localization.Locale.currentLocale.foundation } diff --git a/Projects/hCoreUI/Sources/Localization.Locale+Icon.swift b/Projects/hCoreUI/Sources/Localization.Locale+Icon.swift index 2bb0cd60e1..098feef0f4 100644 --- a/Projects/hCoreUI/Sources/Localization.Locale+Icon.swift +++ b/Projects/hCoreUI/Sources/Localization.Locale+Icon.swift @@ -6,11 +6,7 @@ extension Localization.Locale { switch self { case .sv_SE: return hCoreUIAssets.flagSE.image - case .nb_NO: - return hCoreUIAssets.flagNO.image - case .da_DK: - return hCoreUIAssets.flagDK.image - case .en_SE, .en_NO, .en_DK: + case .en_SE: return hCoreUIAssets.flagUK.image } } diff --git a/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift b/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift index 794b889afb..787388dc5e 100644 --- a/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift +++ b/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift @@ -85,7 +85,7 @@ public enum ExternalDependencies: CaseIterable { return [.package(url: "https://github.com/DataDog/dd-sdk-ios.git", .exact("2.7.1"))] case .authlib: return [ - .package(url: "https://github.com/HedvigInsurance/authlib.git", .exact("1.3.2120240313135116")) + .package(url: "https://github.com/HedvigInsurance/authlib.git", .exact("1.3.2120240730134747")) ] case .tagkit: return [ From 5ce865d51e6c93cba454a36015c106da5f5b7cab Mon Sep 17 00:00:00 2001 From: julia-andersson Date: Thu, 1 Aug 2024 15:48:40 +0200 Subject: [PATCH 3/8] remove localize generated files for dk ad no --- scripts/translations.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/translations.sh b/scripts/translations.sh index 0e88a34827..f14acab153 100755 --- a/scripts/translations.sh +++ b/scripts/translations.sh @@ -3,7 +3,7 @@ TMPDIR=/tmp function runLokalise() { DEST=$TMPDIR/$(uuidgen) mkdir $DEST - $TMPDIR/lokalise2 file download --project-id 743091915e9da969db9340.20943733 --token 4fe9c836530f3f946d86ce5cef36fb74ec437f56 --dest $DEST --format strings --unzip-to "./Projects/hCore/Resources" --placeholder-format ios --filter-langs en,da_DK,en_DK,en_NO,nb_NO,en_SE,sv_SE --escape-percent 1 + $TMPDIR/lokalise2 file download --project-id 743091915e9da969db9340.20943733 --token 4fe9c836530f3f946d86ce5cef36fb74ec437f56 --dest $DEST --format strings --unzip-to "./Projects/hCore/Resources" --placeholder-format ios --filter-langs en,en_SE,sv_SE --escape-percent 1 } if [[ -f $TMPDIR/lokalise2 ]] From 7da67ea2cb0598e8ada67259d82efd088d12aaef Mon Sep 17 00:00:00 2001 From: danieljohannsson Date: Thu, 1 Aug 2024 15:23:36 +0200 Subject: [PATCH 4/8] Removed DK and NO --- .../Sources/LanguageAndMarketPickerView.swift | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/Projects/Market/Sources/LanguageAndMarketPickerView.swift b/Projects/Market/Sources/LanguageAndMarketPickerView.swift index 83b87a1f3f..773ddb34b8 100644 --- a/Projects/Market/Sources/LanguageAndMarketPickerView.swift +++ b/Projects/Market/Sources/LanguageAndMarketPickerView.swift @@ -56,36 +56,11 @@ public struct LanguagePickerView: View { @ViewBuilder func viewFor(view: LanguagePicker) -> some View { switch view { - // case .market: - // marketView case .language: languageView } } - // private var marketView: some View { - // hSection { - // VStack(spacing: 4) { - // ForEach(Market.activatedMarkets, id: \.title) { market in - // hRadioField( - // id: market.rawValue, - // leftView: { - // HStack(spacing: 16) { - // Image(uiImage: market.icon) - // .resizable() - // .frame(width: 24, height: 24) - // hText(market.title, style: .title3) - // .foregroundColor(hTextColor.Opaque.primary) - // } - // .asAnyView - // }, - // selected: $vm.selectedMarketCode - // ) - // } - // } - // } - // } - private var languageView: some View { hSection { VStack(spacing: 4) { @@ -176,7 +151,6 @@ class LanguagePickerViewModel: ObservableObject { } enum LanguagePicker: Int, CaseIterable, Identifiable { - // case market case language var id: Int { self.rawValue } From 4ab08a52b00970f7ec9efda7470326fc7629f7a2 Mon Sep 17 00:00:00 2001 From: danieljohannsson Date: Thu, 1 Aug 2024 16:08:44 +0200 Subject: [PATCH 5/8] Remove DK and NO --- .../Project+DependenciesTemplate.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift b/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift index 787388dc5e..794b889afb 100644 --- a/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift +++ b/Tuist/ProjectDescriptionHelpers/Project+DependenciesTemplate.swift @@ -85,7 +85,7 @@ public enum ExternalDependencies: CaseIterable { return [.package(url: "https://github.com/DataDog/dd-sdk-ios.git", .exact("2.7.1"))] case .authlib: return [ - .package(url: "https://github.com/HedvigInsurance/authlib.git", .exact("1.3.2120240730134747")) + .package(url: "https://github.com/HedvigInsurance/authlib.git", .exact("1.3.2120240313135116")) ] case .tagkit: return [ From 9aaf49f78d68072b56a58d83754595a0e7f93185 Mon Sep 17 00:00:00 2001 From: danieljohannsson Date: Fri, 2 Aug 2024 10:10:37 +0200 Subject: [PATCH 6/8] Change language variable to languageView --- Projects/App/Sources/Journeys/LoginNavigation.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Projects/App/Sources/Journeys/LoginNavigation.swift b/Projects/App/Sources/Journeys/LoginNavigation.swift index 5ada42f06d..49ea1d88d5 100644 --- a/Projects/App/Sources/Journeys/LoginNavigation.swift +++ b/Projects/App/Sources/Journeys/LoginNavigation.swift @@ -73,7 +73,7 @@ public struct NotLoggedInView: View { case .loading: ZStack {} case .language: - language + languageView } } .environment(\.colorScheme, .light) @@ -84,7 +84,7 @@ public struct NotLoggedInView: View { } @ViewBuilder - var language: some View { + var languageView: some View { ZStack { VStack { HStack { From 86be085e706d00e94e9cbe2ceb23b58dae3ef2af Mon Sep 17 00:00:00 2001 From: julia-andersson Date: Tue, 20 Aug 2024 15:05:55 +0200 Subject: [PATCH 7/8] remove a lot of market stuff --- .../App/Sources/AppDelegate+Unleash.swift | 2 +- .../Sources/Journeys/LoggedInNavigation.swift | 14 +-- .../Sources/Journeys/LoginNavigation.swift | 25 +--- .../Impersonation/ImpersonationSettings.swift | 3 - .../Sources/OTP/OTPEntryView.swift | 10 +- .../AuthenticationClientAuthLib.swift | 22 +--- Projects/Home/Sources/HomeState.swift | 4 +- ...kerView.swift => LanguagePickerView.swift} | 73 +---------- Projects/Market/Sources/Market.swift | 63 ---------- Projects/Market/Sources/MarketStore.swift | 7 -- Projects/Market/Sources/PickLanguage.swift | 117 ------------------ .../Navigation/ProfileNavigation.swift | 3 +- Projects/hCore/Sources/ApplicationState.swift | 31 ----- .../FeatureFlags/FeatureFlagOctopus.swift | 1 - Projects/hCore/Sources/Localization.swift | 28 ----- 15 files changed, 20 insertions(+), 383 deletions(-) rename Projects/Market/Sources/{LanguageAndMarketPickerView.swift => LanguagePickerView.swift} (56%) delete mode 100644 Projects/Market/Sources/Market.swift delete mode 100644 Projects/Market/Sources/PickLanguage.swift diff --git a/Projects/App/Sources/AppDelegate+Unleash.swift b/Projects/App/Sources/AppDelegate+Unleash.swift index 4e05896a7d..bab51c4769 100644 --- a/Projects/App/Sources/AppDelegate+Unleash.swift +++ b/Projects/App/Sources/AppDelegate+Unleash.swift @@ -17,7 +17,7 @@ extension AppDelegate { let optionalDictionary: [String: String?] = [ "memberId": memberId, "appVersion": Bundle.main.appVersion, - "market": Localization.Locale.currentLocale.market.rawValue, + "market": "se", "osVersion": UIDevice.current.systemVersion, ] diff --git a/Projects/App/Sources/Journeys/LoggedInNavigation.swift b/Projects/App/Sources/Journeys/LoggedInNavigation.swift index 3555b9bdcf..7d4f83e6f1 100644 --- a/Projects/App/Sources/Journeys/LoggedInNavigation.swift +++ b/Projects/App/Sources/Journeys/LoggedInNavigation.swift @@ -207,19 +207,7 @@ struct LoggedInNavigation: View { ) .environmentObject(vm.profileNavigationVm) case .pickLanguage: - PickLanguage { [weak profileNavigationVm = vm.profileNavigationVm, weak mainNavigationVm, weak vm] _ in - //show loading screen since we everything needs to be updated - mainNavigationVm?.hasLaunchFinished = false - profileNavigationVm?.isLanguagePickerPresented = false - //show home screen with updated langauge - mainNavigationVm?.loggedInVm = .init() - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - mainNavigationVm?.hasLaunchFinished = true - vm?.selectedTab = 0 - } - } onCancel: { [weak profileNavigationVm = vm.profileNavigationVm] in - profileNavigationVm?.isLanguagePickerPresented = false - } + LanguagePickerView() case .deleteRequestLoading: DeleteRequestLoadingView( screenState: .success, diff --git a/Projects/App/Sources/Journeys/LoginNavigation.swift b/Projects/App/Sources/Journeys/LoginNavigation.swift index 49ea1d88d5..cb4ef1285d 100644 --- a/Projects/App/Sources/Journeys/LoginNavigation.swift +++ b/Projects/App/Sources/Journeys/LoginNavigation.swift @@ -24,15 +24,12 @@ struct LoginNavigation: View { .embededInNavigation() } - .detent(presented: $vm.showLogin, style: .large, tracking: Localization.Locale.currentLocale.market) { + .detent(presented: $vm.showLogin, style: .large, tracking: Localization.Locale.currentLocale.rawValue) { Group { - switch Localization.Locale.currentLocale.market { - case .se: - BankIDLoginQRView { - let store: UgglanStore = globalPresentableStoreContainer.get() - await store.sendAsync(.setIsDemoMode(to: true)) - ApolloClient.initAndRegisterClient() - } + BankIDLoginQRView { + let store: UgglanStore = globalPresentableStoreContainer.get() + await store.sendAsync(.setIsDemoMode(to: true)) + ApolloClient.initAndRegisterClient() } } .environmentObject(otpState) @@ -186,7 +183,7 @@ public class NotLoggedViewModel: ObservableObject { webUrl .appending("utm_source", value: "ios") .appending("utm_medium", value: "hedvig-app") - .appending("utm_campaign", value: Localization.Locale.currentLocale.market.rawValue.lowercased()) + .appending("utm_campaign", value: "se") UIApplication.shared.open(webUrl) } @@ -291,13 +288,3 @@ private class PlayerUIView: UIView { playerLayer.frame = bounds } } - -extension Localization.Locale.Market: TrackingViewNameProtocol { - public var nameForTracking: String { - switch self { - case .se: - return .init(describing: BankIDLoginQRView.self) - - } - } -} diff --git a/Projects/App/Sources/Screens/Impersonation/ImpersonationSettings.swift b/Projects/App/Sources/Screens/Impersonation/ImpersonationSettings.swift index 02b4e04bb4..f26bc9167f 100644 --- a/Projects/App/Sources/Screens/Impersonation/ImpersonationSettings.swift +++ b/Projects/App/Sources/Screens/Impersonation/ImpersonationSettings.swift @@ -19,9 +19,6 @@ struct ImpersonationSettings: View { } .onTap { Task { - if let realMarket = Market(rawValue: locale.market.rawValue) { - marketStore.send(.selectMarket(market: realMarket)) - } Localization.Locale.currentLocale = locale await marketStore.sendAsync(.selectLanguage(language: locale.rawValue)) ApplicationState.preserveState(.loggedIn) diff --git a/Projects/Authentication/Sources/OTP/OTPEntryView.swift b/Projects/Authentication/Sources/OTP/OTPEntryView.swift index ef9a646135..73e0e40d00 100644 --- a/Projects/Authentication/Sources/OTP/OTPEntryView.swift +++ b/Projects/Authentication/Sources/OTP/OTPEntryView.swift @@ -52,17 +52,11 @@ class OTPEntryViewModel: ObservableObject { @hTextFieldFocusState var focusInputField = false weak var router: Router? var masking: Masking { - switch Localization.Locale.currentLocale.market { - case .se: - return Masking(type: .email) - } + return Masking(type: .email) } var title: String { - switch Localization.Locale.currentLocale.market { - case .se: - return L10n.Login.enterYourEmailAddress - } + return L10n.Login.enterYourEmailAddress } func onSubmit(otpState: OTPState) { diff --git a/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift b/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift index 65998d98cd..2c2d33c72f 100644 --- a/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift +++ b/Projects/Authentication/Sources/Service/OctopusImplementation/AuthenticationClientAuthLib.swift @@ -79,22 +79,16 @@ final public class AuthenticationClientAuthLib: AuthenticationClient { public func start(with otpState: OTPState) async throws -> (verifyUrl: URL, resendUrl: URL, maskedEmail: String?) { let personalNumber: String? = { - switch Localization.Locale.currentLocale.market { - case .se: - return nil - } + return nil }() let email: String? = { - switch Localization.Locale.currentLocale.market { - case .se: - return otpState.input - } + return otpState.input }() do { let data = try await self.networkAuthRepository.startLoginAttempt( loginMethod: .otp, - market: Localization.Locale.currentLocale.market.asOtpMarket, + market: .se, personalNumber: personalNumber, email: email ) @@ -124,7 +118,7 @@ final public class AuthenticationClientAuthLib: AuthenticationClient { do { let data = try await self.networkAuthRepository.startLoginAttempt( loginMethod: .seBankid, - market: Localization.Locale.currentLocale.market.asOtpMarket, + market: .se, personalNumber: nil, email: nil ) @@ -278,14 +272,6 @@ extension hGraphQL.Environment { } } -extension Localization.Locale.Market { - fileprivate var asOtpMarket: OtpMarket { - switch self { - case .se: return .se - } - } -} - extension AuthentificationError: LocalizedError { var errorDescription: String? { switch self { diff --git a/Projects/Home/Sources/HomeState.swift b/Projects/Home/Sources/HomeState.swift index d005e7a506..5d39d37745 100644 --- a/Projects/Home/Sources/HomeState.swift +++ b/Projects/Home/Sources/HomeState.swift @@ -198,9 +198,7 @@ public final class HomeStore: LoadingStateStore some View { - switch view { - case .language: - languageView - } - } - private var languageView: some View { hSection { VStack(spacing: 4) { - ForEach(vm.selectedMarket.languages, id: \.lprojCode) { locale in + ForEach(Localization.Locale.allCases, id: \.lprojCode) { locale in hRadioField( id: locale.rawValue, leftView: { @@ -95,74 +83,21 @@ class LanguagePickerViewModel: ObservableObject { @Published var selectedLocale = Localization.Locale.currentLocale @Published var selectedLocaleCode: String? = Localization.Locale.currentLocale.rawValue - @Published var selectedMarket: Market - @Published var selectedMarketCode: String? - - @Published var trigger = LanguagePicker.language - @Published var previous = LanguagePicker.language - @Published var insertion: AnyTransition = .move(edge: .leading) @Published var removal: AnyTransition = .move(edge: .trailing) var cancellables = Set() - @Published var selected: LanguagePicker = .language { - willSet { - if previous != selected { - insertion = previous.move(selected) - removal = selected.move(previous) - - withAnimation { - trigger = selected - previous = selected - } - } - } - } - init() { - let store: MarketStore = globalPresentableStoreContainer.get() - selectedMarket = store.state.market - selectedMarketCode = store.state.market.rawValue $selectedLocaleCode.sink { [weak self] selectedLocaleCode in if let selectedLocaleCode, let locale = Localization.Locale(rawValue: selectedLocaleCode) { self?.selectedLocale = locale } } .store(in: &cancellables) - $selectedMarketCode.sink { [weak self] selectedMarketCode in - if let selectedMarketCode, let market = Market(rawValue: selectedMarketCode) { - self?.selectedMarket = market - if let currentSelectedLocale = market.languages.first(where: { $0 == Localization.Locale.currentLocale } - ) { - self?.selectedLocaleCode = currentSelectedLocale.rawValue - } else { - self?.selectedLocaleCode = market.preferredLanguage.rawValue - } - } - } - .store(in: &cancellables) } func save() async { let store: MarketStore = globalPresentableStoreContainer.get() - await store.sendAsync(.selectMarket(market: selectedMarket)) await store.sendAsync(.selectLanguage(language: self.selectedLocale.rawValue)) } } - -enum LanguagePicker: Int, CaseIterable, Identifiable { - case language - - var id: Int { self.rawValue } - - var title: String { - switch self { - case .language: - return L10n.LanguagePickerModal.title - } - } - - func move(_ otherPanel: LanguagePicker) -> AnyTransition { - return otherPanel.rawValue < self.rawValue ? .move(edge: .trailing) : .move(edge: .leading) - } -} diff --git a/Projects/Market/Sources/Market.swift b/Projects/Market/Sources/Market.swift deleted file mode 100644 index 775c2d008a..0000000000 --- a/Projects/Market/Sources/Market.swift +++ /dev/null @@ -1,63 +0,0 @@ -import Foundation -import SwiftUI -import hCore -import hCoreUI -import hGraphQL - -public enum Market: String, CaseIterable, Codable { - case sweden = "SE" - - var id: String { - switch self { - case .sweden: return "se" - } - } - - public var title: String { - switch self { - case .sweden: return L10n.marketSweden - } - } - - public var icon: UIImage { - switch self { - case .sweden: return hCoreUIAssets.flagSE.image - } - } - - static var activatedMarkets: [Market] { - let activatedMarkets: [Market] = [.sweden] - return activatedMarkets - } - - var languages: [Localization.Locale] { - switch self { - case .sweden: return [.sv_SE, .en_SE] - } - } - - var preferredLanguage: Localization.Locale { - guard let firstLanguage = languages.first else { return .sv_SE } - - guard - let bestMatchedLanguage = Bundle.preferredLocalizations(from: languages.map { $0.lprojCode }) - .first - else { return firstLanguage } - - return Localization.Locale(rawValue: bestMatchedLanguage.replacingOccurrences(of: "-", with: "_")) - ?? firstLanguage - } - - static func fromLocalization(_ market: Localization.Locale.Market) -> Self { - switch market { - case .se: return .sweden - } - } - - var showGetQuote: Bool { - switch self { - case .sweden: - return true - } - } -} diff --git a/Projects/Market/Sources/MarketStore.swift b/Projects/Market/Sources/MarketStore.swift index 47ba2e4941..83a668fe9c 100644 --- a/Projects/Market/Sources/MarketStore.swift +++ b/Projects/Market/Sources/MarketStore.swift @@ -3,13 +3,10 @@ import Presentation import hCore public struct MarketState: StateProtocol { - public var market: Market = .fromLocalization(Localization.Locale.currentLocale.market) - public init() {} } public enum MarketAction: ActionProtocol { - case selectMarket(market: Market) case selectLanguage(language: String) } @@ -19,8 +16,6 @@ public final class MarketStore: StateStore { _ action: MarketAction ) async { switch action { - case let .selectMarket(market): - Localization.Locale.currentLocale = market.preferredLanguage case let .selectLanguage(language): if let language = Localization.Locale(rawValue: language) { Localization.Locale.currentLocale = language @@ -32,8 +27,6 @@ public final class MarketStore: StateStore { var newState = state switch action { - case let .selectMarket(market): - newState.market = market default: break } diff --git a/Projects/Market/Sources/PickLanguage.swift b/Projects/Market/Sources/PickLanguage.swift deleted file mode 100644 index c05c8b6496..0000000000 --- a/Projects/Market/Sources/PickLanguage.swift +++ /dev/null @@ -1,117 +0,0 @@ -import Presentation -import SwiftUI -import hCore -import hCoreUI - -public struct PickLanguage: View { - let currentMarket: Market - let onSave: ((String) -> Void)? - let onCancel: (() -> Void)? - @PresentableStore var store: MarketStore - - @State var currentLocale: Localization.Locale = .currentLocale - @State var code: String? = Localization.Locale.currentLocale.lprojCode - - public init( - currentMarket: Market - ) { - self.currentMarket = currentMarket - onSave = nil - onCancel = nil - } - - public init( - onSave: @escaping (String) -> Void, - onCancel: @escaping () -> Void - ) { - let store: MarketStore = globalPresentableStoreContainer.get() - currentMarket = store.state.market - self.onSave = onSave - self.onCancel = onCancel - } - - public var body: some View { - hForm { - VStack(spacing: 8) { - if onSave == nil { - hSection { - hText(L10n.LanguagePickerModal.text, style: .body1) - .foregroundColor(.secondary) - .frame(maxWidth: .infinity, alignment: .leading) - } - } - hSection { - VStack(spacing: 4) { - ForEach(currentMarket.languages, id: \.lprojCode) { locale in - hRadioField( - id: locale.lprojCode, - leftView: { - HStack(spacing: 16) { - Image(uiImage: locale.icon) - .resizable() - .frame(width: 24, height: 24) - hText(locale.displayName, style: .title3) - .foregroundColor(hTextColor.Opaque.primary) - } - .asAnyView - }, - selected: $code - ) - } - } - } - } - .sectionContainerStyle(.transparent) - } - .hFormAttachToBottom { - hSection { - VStack(spacing: 8) { - if let onSave { - hButton.LargeButton(type: .primary) { - Localization.Locale.currentLocale = currentLocale - onSave(currentLocale.code) - } content: { - hText(L10n.generalSaveButton) - } - } - if let onCancel { - hButton.LargeButton(type: .ghost) { - onCancel() - } content: { - hText(L10n.generalCancelButton) - } - } - } - } - .padding(.vertical, .padding16) - .sectionContainerStyle(.transparent) - .hWithoutDivider - } - .onChange(of: code) { newValue in - if let locale = Localization.Locale.allCases.first(where: { $0.lprojCode == newValue }) { - if onSave == nil { - Localization.Locale.currentLocale = locale - } - currentLocale = locale - } - } - } - - @hColorBuilder - func retColor(isSelected: Bool) -> some hColor { - if isSelected { - hTextColor.Opaque.primary - } else { - hSurfaceColor.Opaque.primary - } - } - - @hColorBuilder - func getBorderColor(isSelected: Bool) -> some hColor { - if isSelected { - hTextColor.Opaque.primary - } else { - hBorderColor.secondary - } - } -} diff --git a/Projects/Profile/Sources/Navigation/ProfileNavigation.swift b/Projects/Profile/Sources/Navigation/ProfileNavigation.swift index ed7e1289d9..0180abae61 100644 --- a/Projects/Profile/Sources/Navigation/ProfileNavigation.swift +++ b/Projects/Profile/Sources/Navigation/ProfileNavigation.swift @@ -140,8 +140,7 @@ extension ProfileRedirectType: TrackingViewNameProtocol { case .deleteRequestLoading: return .init(describing: DeleteRequestLoadingView.self) case .pickLanguage: - return .init(describing: PickLanguage.self) + return .init(describing: LanguagePickerView.self) } } - } diff --git a/Projects/hCore/Sources/ApplicationState.swift b/Projects/hCore/Sources/ApplicationState.swift index 6958cadf2a..cbd43c314d 100644 --- a/Projects/hCore/Sources/ApplicationState.swift +++ b/Projects/hCore/Sources/ApplicationState.swift @@ -29,21 +29,6 @@ public struct ApplicationState { public static func setPreferredLocale(_ locale: Localization.Locale) { UserDefaults.standard.setValue([locale.lprojCode], forKey: "AppleLanguages") UserDefaults.standard.synchronize() - setMarket(locale.market) - } - - public static func setMarket(_ market: Localization.Locale.Market) { - UserDefaults.standard.set(market.rawValue, forKey: ApplicationState.marketKey) - } - - public static func getMarket() -> Localization.Locale.Market? { - if let marketRawValue = UserDefaults.standard.value(forKey: marketKey) as? String, - let market = Localization.Locale.Market(rawValue: marketRawValue) - { - return market - } - - return nil } private static var hasPreferredLocale: Bool { @@ -62,22 +47,6 @@ public struct ApplicationState { } } - func preferredLocaleForMarket(_ market: Localization.Locale.Market) -> Localization.Locale? { - let availableLanguages = market.availableLocales.map { $0.lprojCode } - - let bestMatchedLanguage = Bundle.preferredLocalizations(from: availableLanguages).first - - if let bestMatchedLanguage = bestMatchedLanguage { - return Localization.Locale( - rawValue: bestMatchedLanguage.replacingOccurrences(of: "-", with: "_") - ) - } - - return nil - } - - if let market = getMarket(), let locale = preferredLocaleForMarket(market) { return locale } - let availableLanguages = Localization.Locale.allCases.map { $0.lprojCode } let bestMatchedLanguage = Bundle.preferredLocalizations(from: availableLanguages).first diff --git a/Projects/hCore/Sources/FeatureFlags/FeatureFlagOctopus.swift b/Projects/hCore/Sources/FeatureFlags/FeatureFlagOctopus.swift index f9b9701161..bd13351f0a 100644 --- a/Projects/hCore/Sources/FeatureFlags/FeatureFlagOctopus.swift +++ b/Projects/hCore/Sources/FeatureFlags/FeatureFlagOctopus.swift @@ -70,7 +70,6 @@ public class FeatureFlagsUnleash: FeatureFlags { private func startUnleash() { log.info("Started loading unleash experiments") - emailPreferencesEnabled = Localization.Locale.currentLocale.market == .se unleashClient? .start( true, diff --git a/Projects/hCore/Sources/Localization.swift b/Projects/hCore/Sources/Localization.swift index c3d81423ed..0007fff395 100644 --- a/Projects/hCore/Sources/Localization.swift +++ b/Projects/hCore/Sources/Localization.swift @@ -7,34 +7,6 @@ public enum Localization { case sv_SE case en_SE - public enum Market: String, Codable, CaseIterable { - case se = "SE" - - public var currencyCode: String { - switch self { - case .se: return "SEK" - } - } - - public var availableLocales: [Localization.Locale] { - switch self { - case .se: return [.sv_SE, .en_SE] - } - } - - public var marketName: String { - switch self { - case .se: return L10n.marketSweden - } - } - } - - public var market: Market { - switch self { - case .sv_SE, .en_SE: return .se - } - } - public var acceptLanguageHeader: String { switch self { case .sv_SE: return "sv-SE" From 9a6c14f95836a9942e764bc7d770d432a01516c9 Mon Sep 17 00:00:00 2001 From: julia-andersson Date: Mon, 16 Sep 2024 15:17:10 +0200 Subject: [PATCH 8/8] specify swift-tools-version --- Projects/PresentableStore/Package.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Projects/PresentableStore/Package.swift b/Projects/PresentableStore/Package.swift index 806916ed95..1aba8bb8f3 100644 --- a/Projects/PresentableStore/Package.swift +++ b/Projects/PresentableStore/Package.swift @@ -1,3 +1,4 @@ +// swift-tools-version: 5.10 import PackageDescription let package = Package(