Skip to content

Commit d65bcf4

Browse files
committed
Remove ServiceLocator.stores.sessionManager dependency from POS
1 parent 9a8b6ac commit d65bcf4

File tree

7 files changed

+30
-41
lines changed

7 files changed

+30
-41
lines changed

Modules/Sources/PointOfSale/DependencyProviders/POSDependencyProviding.swift

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Foundation
22
import WooFoundation
33
import Experiments
44
import protocol Yosemite.Action
5-
import protocol Yosemite.SessionManagerProtocol
5+
import struct Yosemite.Site
66

77
/// Main dependency provider protocol for POS module
88
/// This abstracts away direct ServiceLocator access
@@ -11,6 +11,7 @@ public protocol POSDependencyProviding {
1111
var stores: POSStoresProviding { get }
1212
var currency: CurrencySettings { get }
1313
var featureFlags: POSFeatureFlagProviding { get }
14+
var session: POSSessionManagerProviding { get }
1415
}
1516

1617
/// Analytics service abstraction
@@ -28,17 +29,7 @@ public protocol POSStoresProviding {
2829

2930
/// Session manager abstraction
3031
public protocol POSSessionManagerProviding {
31-
var defaultSite: POSSiteProviding? { get }
32-
}
33-
34-
/// Site abstraction
35-
public protocol POSSiteProviding {
36-
// Add site properties as needed during migration
37-
}
38-
39-
/// Storage manager abstraction
40-
public protocol POSStorageProviding {
41-
// Storage methods will be added as we migrate files
32+
var defaultSite: Site? { get }
4233
}
4334

4435
/// Feature flag service abstraction

Modules/Sources/PointOfSale/Environment/POSEnvironmentKeys.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import SwiftUI
22
import WooFoundation
33
import Experiments
44
import protocol Yosemite.Action
5+
import struct Yosemite.Site
56

67
/// Environment key for POS analytics service
78
public struct POSAnalyticsKey: EnvironmentKey {
@@ -42,13 +43,18 @@ public struct POSFeatureFlagsKey: EnvironmentKey {
4243
public static let defaultValue: POSFeatureFlagProviding = DefaultPOSFeatureFlags()
4344
}
4445

46+
/// Environment key for POS session manager
47+
public struct POSSessionManagerKey: EnvironmentKey {
48+
public static let defaultValue: POSSessionManagerProviding = DefaultPOSSessionManager()
49+
}
50+
4551
// Default implementations for testing/previews
4652
private struct DefaultPOSStores: POSStoresProviding {
4753
func dispatch(_ action: Yosemite.Action) {}
4854
}
4955

5056
private struct DefaultPOSSessionManager: POSSessionManagerProviding {
51-
var defaultSite: POSSiteProviding? = nil
57+
var defaultSite: Site? = nil
5258
}
5359

5460
private struct DefaultPOSFeatureFlags: POSFeatureFlagProviding {
@@ -75,4 +81,9 @@ public extension EnvironmentValues {
7581
get { self[POSFeatureFlagsKey.self] }
7682
set { self[POSFeatureFlagsKey.self] = newValue }
7783
}
84+
85+
var posSession: POSSessionManagerProviding {
86+
get { self[POSSessionManagerKey.self] }
87+
set { self[POSSessionManagerKey.self] = newValue }
88+
}
7889
}

WooCommerce/Classes/POS/Adaptors/POSServiceLocatorAdaptor.swift

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import protocol Yosemite.StoresManager
77
import protocol Yosemite.SessionManagerProtocol
88
import protocol Storage.StorageManagerType
99
import protocol Yosemite.Action
10+
import struct Yosemite.Site
1011

1112
/// Adaptor that bridges main app ServiceLocator to POS dependency abstraction to support POS modularization
1213
final class POSServiceLocatorAdaptor: POSDependencyProviding {
@@ -25,6 +26,10 @@ final class POSServiceLocatorAdaptor: POSDependencyProviding {
2526
var featureFlags: POSFeatureFlagProviding {
2627
return POSFeatureFlagAdaptor(featureFlagService: ServiceLocator.featureFlagService)
2728
}
29+
30+
var session: POSSessionManagerProviding {
31+
return POSSessionManagerAdaptor(sessionManager: ServiceLocator.stores.sessionManager)
32+
}
2833
}
2934

3035
// MARK: - Individual Service Adaptors
@@ -48,30 +53,9 @@ private struct POSSessionManagerAdaptor: POSSessionManagerProviding {
4853
self.sessionManager = sessionManager
4954
}
5055

51-
var defaultSite: POSSiteProviding? {
52-
guard let site = sessionManager.defaultSite else { return nil }
53-
return POSSiteAdaptor(site: site)
54-
}
55-
}
56-
57-
private struct POSSiteAdaptor: POSSiteProviding {
58-
private let site: Site
59-
60-
init(site: Site) {
61-
self.site = site
56+
var defaultSite: Site? {
57+
return sessionManager.defaultSite
6258
}
63-
64-
// Add site properties as needed during migration
65-
}
66-
67-
private struct POSStorageAdaptor: POSStorageProviding {
68-
private let storageManager: StorageManagerType
69-
70-
init(storage: StorageManagerType) {
71-
self.storageManager = storage
72-
}
73-
74-
// Storage methods will be added as we migrate files
7559
}
7660

7761
private struct POSFeatureFlagAdaptor: POSFeatureFlagProviding {
@@ -86,8 +70,7 @@ private struct POSFeatureFlagAdaptor: POSFeatureFlagProviding {
8670
}
8771
}
8872

89-
/// Adaptor that implements POSAnalyticsProviding using ServiceLocator
90-
final class POSAnalyticsAdaptor: POSAnalyticsProviding {
73+
private struct POSAnalyticsAdaptor: POSAnalyticsProviding {
9174
func track(event: WooAnalyticsEvent) {
9275
let mainAppEvent = WooAnalyticsEvent(statName: event.statName, properties: event.properties, error: event.error)
9376
ServiceLocator.analytics.track(event: mainAppEvent)

WooCommerce/Classes/POS/Presentation/CartView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ private struct PurchasableItemsCartSection: View {
435435

436436
private func cancelLoadingCallback(for cartItem: Cart.PurchasableItem) -> () -> Void {
437437
return {
438-
ServiceLocator.analytics.track(
438+
analytics.track(
439439
event: .PointOfSale.itemRemovedFromCart(
440440
sourceView: .cart,
441441
itemType: .loading

WooCommerce/Classes/POS/Presentation/PointOfSaleDashboardView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import SwiftUI
44
struct PointOfSaleDashboardView: View {
55
@Environment(PointOfSaleAggregateModel.self) private var posModel
66
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
7+
@Environment(\.posSession) private var session
78

89
@State private var showExitPOSModal: Bool = false
910
@State private var showSupport: Bool = false
@@ -188,7 +189,7 @@ private extension PointOfSaleDashboardView {
188189
NavigationView {
189190
SupportForm(isPresented: $showSupport,
190191
viewModel: SupportFormViewModel(sourceTag: Constants.supportTag,
191-
defaultSite: ServiceLocator.stores.sessionManager.defaultSite))
192+
defaultSite: session.defaultSite))
192193
.toolbar {
193194
ToolbarItem(placement: .confirmationAction) {
194195
Button(Localization.supportDone) {

WooCommerce/Classes/POS/Presentation/PointOfSaleEntryPointView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ struct PointOfSaleEntryPointView: View {
8484
.environment(\.posCurrencySettings, services.currency)
8585
.environment(\.posStores, services.stores)
8686
.environment(\.posFeatureFlags, services.featureFlags)
87+
.environment(\.posSession, services.session)
8788
.injectKeyboardObserver()
8889
.onAppear {
8990
onPointOfSaleModeActiveStateChange(true)

WooCommerce/Classes/POS/Utils/PreviewHelpers.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import enum Yosemite.PointOfSaleBarcodeScanError
2525
import Combine
2626
import struct Yosemite.PaymentIntent
2727
import protocol Yosemite.Action
28+
import struct Yosemite.Site
2829

2930
// MARK: - PreviewProvider helpers
3031
//
@@ -296,6 +297,7 @@ final class POSPreviewServices: POSDependencyProviding {
296297
var stores: POSStoresProviding = POSPreviewStores()
297298
var currency: CurrencySettings = CurrencySettings()
298299
var featureFlags: POSFeatureFlagProviding = POSPreviewFeatureFlags()
300+
var session: POSSessionManagerProviding = POSPreviewSessionManager()
299301
}
300302

301303
// Preview implementations for all service types
@@ -304,7 +306,7 @@ private struct POSPreviewStores: POSStoresProviding {
304306
}
305307

306308
private struct POSPreviewSessionManager: POSSessionManagerProviding {
307-
var defaultSite: POSSiteProviding? = nil
309+
var defaultSite: Site? = nil
308310
}
309311

310312
private struct POSPreviewFeatureFlags: POSFeatureFlagProviding {

0 commit comments

Comments
 (0)