Skip to content

Commit 4e34cd2

Browse files
committed
15180 Create AggregateModel when POS appears
Based on [Apple’s advice](https://developer.apple.com/documentation/swiftui/state#Store-observable-objects), this commit updates the `posModel` creation to happen in the task, to avoid it being created whenever init is called (confusingly, this may happen more than once for a view.)
1 parent 0acbbbc commit 4e34cd2

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

WooCommerce/Classes/POS/Presentation/PointOfSaleEntryPointView.swift

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@ import SwiftUI
22

33
@available(iOS 17.0, *)
44
struct PointOfSaleEntryPointView: View {
5-
@State private var posModel: PointOfSaleAggregateModel
5+
@State private var posModel: PointOfSaleAggregateModel?
66
@StateObject private var posModalManager = POSModalManager()
77
@Environment(\.horizontalSizeClass) private var horizontalSizeClass
88

99
private let onPointOfSaleModeActiveStateChange: ((Bool) -> Void)
10+
private let itemsController: PointOfSaleItemsControllerProtocol
11+
private let cardPresentPaymentService: CardPresentPaymentFacade
12+
private let orderController: PointOfSaleOrderControllerProtocol
13+
private let collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalyticsTracking
1014

1115
init(itemsController: PointOfSaleItemsControllerProtocol,
1216
onPointOfSaleModeActiveStateChange: @escaping ((Bool) -> Void),
@@ -15,26 +19,36 @@ struct PointOfSaleEntryPointView: View {
1519
collectOrderPaymentAnalyticsTracker: POSCollectOrderPaymentAnalyticsTracking) {
1620
self.onPointOfSaleModeActiveStateChange = onPointOfSaleModeActiveStateChange
1721

18-
let posModel = PointOfSaleAggregateModel(
19-
itemsController: itemsController,
20-
cardPresentPaymentService: cardPresentPaymentService,
21-
orderController: orderController,
22-
collectOrderPaymentAnalyticsTracker: collectOrderPaymentAnalyticsTracker)
23-
24-
self._posModel = State(wrappedValue: posModel)
22+
self.itemsController = itemsController
23+
self.cardPresentPaymentService = cardPresentPaymentService
24+
self.orderController = orderController
25+
self.collectOrderPaymentAnalyticsTracker = collectOrderPaymentAnalyticsTracker
2526
}
2627

2728
var body: some View {
28-
PointOfSaleDashboardView()
29+
Group {
30+
if let posModel = posModel {
31+
PointOfSaleDashboardView()
32+
.environment(posModel)
33+
} else {
34+
PointOfSaleLoadingView()
35+
}
36+
}
37+
.task {
38+
posModel = PointOfSaleAggregateModel(
39+
itemsController: itemsController,
40+
cardPresentPaymentService: cardPresentPaymentService,
41+
orderController: orderController,
42+
collectOrderPaymentAnalyticsTracker: collectOrderPaymentAnalyticsTracker)
43+
}
2944
.environmentObject(posModalManager)
30-
.environment(posModel)
3145
.onAppear {
3246
onPointOfSaleModeActiveStateChange(true)
3347
}
3448
.onDisappear {
3549
onPointOfSaleModeActiveStateChange(false)
3650
posModalManager.onDisappear()
37-
posModel.pointOfSaleClosed()
51+
posModel?.pointOfSaleClosed()
3852
}
3953
}
4054
}

0 commit comments

Comments
 (0)