Skip to content

Commit f134b12

Browse files
authored
[Woo POS] Make POS aggregate model require iOS 17 (#15048)
2 parents a553f74 + 72dade1 commit f134b12

18 files changed

+241
-38
lines changed

WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ protocol PointOfSaleAggregateModelProtocol {
3737
func checkOut() async
3838
}
3939

40+
@available(iOS 17.0, *)
4041
class PointOfSaleAggregateModel: ObservableObject, PointOfSaleAggregateModelProtocol {
4142
@Published private(set) var orderStage: PointOfSaleOrderStage = .building
4243

@@ -86,6 +87,7 @@ class PointOfSaleAggregateModel: ObservableObject, PointOfSaleAggregateModelProt
8687
}
8788

8889
// MARK: - ItemList
90+
@available(iOS 17.0, *)
8991
extension PointOfSaleAggregateModel {
9092
private func publishItemsViewState() {
9193
itemsController.itemsViewStatePublisher.assign(to: &$itemsViewState)
@@ -117,6 +119,7 @@ private extension POSItem {
117119
}
118120
}
119121

122+
@available(iOS 17.0, *)
120123
extension PointOfSaleAggregateModel {
121124
func addToCart(_ item: POSItem) {
122125
guard let cartItem = item.cartItem else { return }
@@ -149,7 +152,7 @@ extension PointOfSaleAggregateModel {
149152
}
150153

151154
// MARK: - Card payments
152-
155+
@available(iOS 17.0, *)
153156
extension PointOfSaleAggregateModel {
154157
private func publishCardReaderConnectionStatus() {
155158
// When adopting Observable, we can use `assign(to: on:)` here instead
@@ -305,6 +308,7 @@ extension PointOfSaleAggregateModel {
305308
}
306309
}
307310

311+
@available(iOS 17.0, *)
308312
private extension PointOfSaleAggregateModel {
309313
func publishPaymentMessages() {
310314
cardPresentPaymentService.paymentEventPublisher
@@ -395,7 +399,7 @@ private extension PointOfSaleAggregateModel {
395399
}
396400

397401
// MARK: - Order syncing
398-
402+
@available(iOS 17.0, *)
399403
extension PointOfSaleAggregateModel {
400404
@MainActor
401405
func checkOut() async {
@@ -415,6 +419,7 @@ extension PointOfSaleAggregateModel {
415419
}
416420
}
417421

422+
@available(iOS 17.0, *)
418423
private extension PointOfSaleAggregateModel {
419424
enum Constants {
420425
static let initialPage: Int = 1

WooCommerce/Classes/POS/Presentation/CardReaderConnection/CardReaderConnectionStatusView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import SwiftUI
22

3+
@available(iOS 17.0, *)
34
struct CardReaderConnectionStatusView: View {
45
@Environment(\.posBackgroundAppearance) var backgroundAppearance
56
@EnvironmentObject var posModel: PointOfSaleAggregateModel
@@ -64,6 +65,7 @@ struct CardReaderConnectionStatusView: View {
6465
}
6566
}
6667

68+
@available(iOS 17.0, *)
6769
private extension CardReaderConnectionStatusView {
6870
@ViewBuilder
6971
func progressIndicatingCardReaderStatus(title: String) -> some View {
@@ -81,6 +83,7 @@ private extension CardReaderConnectionStatusView {
8183
}
8284
}
8385

86+
@available(iOS 17.0, *)
8487
private extension CardReaderConnectionStatusView {
8588
var connectedFontColor: Color {
8689
switch backgroundAppearance {
@@ -101,6 +104,7 @@ private extension CardReaderConnectionStatusView {
101104
}
102105
}
103106

107+
@available(iOS 17.0, *)
104108
private extension CardReaderConnectionStatusView {
105109
enum Constants {
106110
static let buttonImageAndTextSpacing: CGFloat = 12
@@ -118,6 +122,7 @@ private extension CardReaderConnectionStatusView {
118122
}
119123
}
120124

125+
@available(iOS 17.0, *)
121126
private extension CardReaderConnectionStatusView {
122127
enum Localization {
123128
static let readerConnected = NSLocalizedString(
@@ -156,6 +161,7 @@ private extension CardReaderConnectionStatusView {
156161

157162
#if DEBUG
158163

164+
@available(iOS 17.0, *)
159165
#Preview {
160166
VStack {
161167
CardReaderConnectionStatusView()

WooCommerce/Classes/POS/Presentation/CardReaderConnection/UI States/PointOfSaleCardPresentPaymentInLineMessage.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import SwiftUI
22

3+
@available(iOS 17.0, *)
34
struct PointOfSaleCardPresentPaymentInLineMessage: View {
45
private let messageType: PointOfSaleCardPresentPaymentMessageType
56

@@ -45,6 +46,7 @@ struct PointOfSaleCardPresentPaymentInLineMessage: View {
4546
private var animation: POSCardPresentPaymentInLineMessageAnimation { .init(namespace: namespace) }
4647
}
4748

49+
@available(iOS 17.0, *)
4850
#Preview {
4951
PointOfSaleCardPresentPaymentInLineMessage(messageType: .processing(
5052
viewModel: PointOfSaleCardPresentPaymentProcessingMessageViewModel()))

WooCommerce/Classes/POS/Presentation/CardReaderConnection/UI States/Reader Messages/PointOfSalePaymentSuccessView.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import SwiftUI
22

3+
@available(iOS 17.0, *)
34
struct PointOfSalePaymentSuccessView: View {
45
let viewModel: PointOfSalePaymentSuccessViewModel
56
@Environment(\.colorScheme) var colorScheme
@@ -88,6 +89,7 @@ struct PointOfSalePaymentSuccessView: View {
8889
}
8990
}
9091

92+
@available(iOS 17.0, *)
9193
private extension PointOfSalePaymentSuccessView {
9294
enum Constants {
9395
static let imageName: String = "checkmark"
@@ -102,6 +104,7 @@ private extension PointOfSalePaymentSuccessView {
102104
}
103105
}
104106

107+
@available(iOS 17.0, *)
105108
#Preview {
106109
return PointOfSalePaymentSuccessView(
107110
viewModel: PointOfSalePaymentSuccessViewModel(formattedOrderTotal: "$3.00",

WooCommerce/Classes/POS/Presentation/CartView.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import SwiftUI
22

3+
@available(iOS 17.0, *)
34
struct CartView: View {
45
@EnvironmentObject private var posModel: PointOfSaleAggregateModel
56
private let viewHelper = CartViewHelper()
@@ -135,6 +136,7 @@ private struct ScrollOffSetPreferenceKey: PreferenceKey {
135136
}
136137
}
137138

139+
@available(iOS 17.0, *)
138140
private extension CartView {
139141
var backgroundColor: Color {
140142
switch colorScheme {
@@ -158,6 +160,7 @@ private extension CartView {
158160
}
159161
}
160162

163+
@available(iOS 17.0, *)
161164
private extension CartView {
162165
enum Constants {
163166
static let primaryFont: POSFontStyle = .posTitleEmphasized
@@ -201,6 +204,7 @@ private extension CartView {
201204

202205
/// View sub-components
203206
///
207+
@available(iOS 17.0, *)
204208
private extension CartView {
205209
var checkoutButton: some View {
206210
Button {
@@ -254,6 +258,7 @@ private extension CartView {
254258
}
255259

256260
#if DEBUG
261+
@available(iOS 17.0, *)
257262
#Preview {
258263
let itemsController = PointOfSalePreviewItemsController()
259264
let posModel = PointOfSaleAggregateModel(

WooCommerce/Classes/POS/Presentation/Item Selector/ChildItemList.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import SwiftUI
22
import Yosemite
33

44
/// Displays a scrollable list of child items in POS.
5+
@available(iOS 17.0, *)
56
struct ChildItemList: View {
67
private let parentItem: POSItem
78
private let title: String
@@ -46,6 +47,7 @@ struct ChildItemList: View {
4647
}
4748
}
4849

50+
@available(iOS 17.0, *)
4951
private extension ChildItemList {
5052
@ViewBuilder var headerView: some View {
5153
HStack {
@@ -104,6 +106,7 @@ private extension ChildItemList {
104106
}
105107
}
106108

109+
@available(iOS 17.0, *)
107110
private extension ChildItemList {
108111
enum Localization {
109112
static let back = NSLocalizedString(
@@ -120,6 +123,7 @@ private extension ChildItemList {
120123

121124
#if DEBUG
122125

126+
@available(iOS 17.0, *)
123127
#Preview("Variable product child items") {
124128
let parentProduct = POSVariableParentProduct(
125129
id: .init(),
@@ -166,6 +170,7 @@ private extension ChildItemList {
166170
.environmentObject(posModel)
167171
}
168172

173+
@available(iOS 17.0, *)
169174
#Preview("Variable items load error") {
170175
let parentProduct = POSVariableParentProduct(
171176
id: .init(),

WooCommerce/Classes/POS/Presentation/Item Selector/ItemList.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import protocol WooFoundation.Analytics
44
import struct Yosemite.POSVariableParentProduct
55

66
/// Displays a list of POS items or placeholder card based on the given state.
7+
@available(iOS 17.0, *)
78
struct ItemList<HeaderView: View>: View {
89
@Environment(\.floatingControlAreaSize) private var floatingControlAreaSize: CGSize
910
@EnvironmentObject var posModel: PointOfSaleAggregateModel
@@ -75,6 +76,7 @@ private enum Constants {
7576
static let itemSpacing: CGFloat = 16
7677
}
7778

79+
@available(iOS 17.0, *)
7880
private struct ItemListRow: View {
7981
let item: POSItem
8082
let analytics: Analytics = ServiceLocator.analytics
@@ -106,6 +108,7 @@ private struct ItemListRow: View {
106108
}
107109
}
108110

111+
@available(iOS 17.0, *)
109112
private extension ItemListRow {
110113
enum Localization {
111114
static let variationsAvailable = NSLocalizedString(
@@ -117,7 +120,7 @@ private extension ItemListRow {
117120
}
118121

119122
#if DEBUG
120-
123+
@available(iOS 17.0, *)
121124
#Preview("Loaded with items") {
122125
ItemList(
123126
state:
@@ -146,6 +149,7 @@ private extension ItemListRow {
146149
)
147150
}
148151

152+
@available(iOS 17.0, *)
149153
#Preview("Loading") {
150154
let posModel = PointOfSaleAggregateModel(
151155
itemsController: PointOfSalePreviewItemsController(),

WooCommerce/Classes/POS/Presentation/ItemListView.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import SwiftUI
22
import enum Yosemite.POSItem
33
import protocol Yosemite.POSOrderableItem
44

5+
@available(iOS 17.0, *)
56
struct ItemListView: View {
67
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
78

@@ -49,6 +50,7 @@ struct ItemListView: View {
4950

5051
/// View Helpers
5152
///
53+
@available(iOS 17.0, *)
5254
private extension ItemListView {
5355
@ViewBuilder
5456
var headerView: some View {
@@ -153,6 +155,7 @@ private extension ItemListView {
153155
}
154156
}
155157

158+
@available(iOS 17.0, *)
156159
private extension ItemListView {
157160
var shouldShowHeaderBanner: Bool {
158161
itemListState.eligibleToShowSimpleProductsBanner && !isHeaderBannerDismissed
@@ -213,6 +216,7 @@ private extension GhostItemCardView {
213216

214217
/// Constants
215218
///
219+
@available(iOS 17.0, *)
216220
private extension ItemListView {
217221
enum Constants {
218222
static let bannerTitleFont: POSFontStyle = .posBodyEmphasized
@@ -308,6 +312,7 @@ private extension ItemListView {
308312

309313
#if DEBUG
310314

315+
@available(iOS 17.0, *)
311316
#Preview("Loaded with all product types") {
312317
let itemsController = PointOfSalePreviewItemsController()
313318
Task { @MainActor in
@@ -321,6 +326,7 @@ private extension ItemListView {
321326
.environmentObject(posModel)
322327
}
323328

329+
@available(iOS 17.0, *)
324330
#Preview("Loading") {
325331
let posModel = PointOfSaleAggregateModel(
326332
itemsController: PointOfSalePreviewItemsController(),

WooCommerce/Classes/POS/Presentation/POSFloatingControlView.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import SwiftUI
22

3+
@available(iOS 17.0, *)
34
struct POSFloatingControlView: View {
45
@Environment(\.posBackgroundAppearance) var backgroundAppearance
56
@EnvironmentObject private var posModel: PointOfSaleAggregateModel
@@ -59,6 +60,7 @@ struct POSFloatingControlView: View {
5960
}
6061
}
6162

63+
@available(iOS 17.0, *)
6264
private extension POSFloatingControlView {
6365
var backgroundColor: Color {
6466
switch backgroundAppearance {
@@ -79,12 +81,14 @@ private extension POSFloatingControlView {
7981
}
8082
}
8183

84+
@available(iOS 17.0, *)
8285
extension POSFloatingControlView {
8386
static var secondaryFontColor: Color {
8487
return .posDarkGray.opacity(0.6)
8588
}
8689
}
8790

91+
@available(iOS 17.0, *)
8892
private extension POSFloatingControlView {
8993
enum Constants {
9094
static let size: CGFloat = 56

WooCommerce/Classes/POS/Presentation/PaymentButtons.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import SwiftUI
22

3+
@available(iOS 17.0, *)
34
struct PaymentsActionButtons: View {
45
@EnvironmentObject private var posModel: PointOfSaleAggregateModel
56
@Binding var isShowingSendReceiptView: Bool
@@ -22,6 +23,7 @@ struct PaymentsActionButtons: View {
2223
}
2324
}
2425

26+
@available(iOS 17.0, *)
2527
private extension PaymentsActionButtons {
2628
var sendReceiptButton: some View {
2729
Button(action: {
@@ -61,6 +63,7 @@ private extension PaymentsActionButtons {
6163
}
6264
}
6365

66+
@available(iOS 17.0, *)
6467
private extension PaymentsActionButtons {
6568
func handleSendReceiptAction() async {
6669
let isEligible = await checkReceiptEligibility()
@@ -80,6 +83,7 @@ private extension PaymentsActionButtons {
8083
}
8184
}
8285

86+
@available(iOS 17.0, *)
8387
private extension PaymentsActionButtons {
8488
enum Constants {
8589
static let buttonSpacing: CGFloat = 12
@@ -101,6 +105,7 @@ private extension PaymentsActionButtons {
101105
}
102106

103107
#if DEBUG
108+
@available(iOS 17.0, *)
104109
#Preview {
105110
let posModel = PointOfSaleAggregateModel(
106111
itemsController: PointOfSalePreviewItemsController(),

0 commit comments

Comments
 (0)