11import SwiftUI
2- import enum Yosemite. AppSettingsAction
32
43struct PointOfSaleSettingsHardwareDetailView : View {
4+ let settingsController : PointOfSaleSettingsControllerProtocol
5+
56 @State private var navigationPath : [ NavigationDestination ] = [ ]
6- @State private var lastKnownLoadedCardReader : String ?
77 @State private var showBarcodeScanningSetupModal : Bool = false
88 @State private var showBarcodeScanningDocumentationModal : Bool = false
99 @State private var showCardReaderDocumentationModal : Bool = false
1010
11+ private var cardReaderName : String {
12+ if let cardReaderName = settingsController. connectedCardReader? . name {
13+ return cardReaderName
14+ } else {
15+ return Localization . cardReaderNotConnected
16+ }
17+ }
18+
19+ private var formattedBatteryLevel : String {
20+ if let batteryLevel = settingsController. connectedCardReader? . batteryLevel {
21+ let percentage = Int ( batteryLevel * 100 )
22+ return " \( percentage) % "
23+ } else {
24+ return Localization . batteryLevelUnknown
25+ }
26+ }
27+
1128 var body : some View {
1229 NavigationStack ( path: $navigationPath) {
1330 List ( HardwareDestination . allCases) { destination in
@@ -53,37 +70,29 @@ struct PointOfSaleSettingsHardwareDetailView: View {
5370
5471 private var cardReadersView : some View {
5572 VStack ( spacing: POSSpacing . large) {
56- VStack ( spacing: POSSpacing . medium) {
57- VStack ( spacing: POSPadding . small) {
58- Text ( Localization . cardReadersDescription)
59- . font ( . posBodyLargeRegular( ) )
60- . multilineTextAlignment ( . center)
61- Text ( Localization . cardReadersSubtitle1)
62- . font ( . posBodyMediumRegular( ) )
63- . foregroundStyle ( . secondary)
64- . multilineTextAlignment ( . center)
65- Text ( Localization . cardReadersSubtitle2)
66- . font ( . posBodyMediumRegular( ) )
67- . foregroundStyle ( . secondary)
68- . multilineTextAlignment ( . center)
69- Text ( Localization . cardReadersSubtitle3)
70- . font ( . posBodyMediumRegular( ) )
71- . foregroundStyle ( . secondary)
72- . multilineTextAlignment ( . center)
73- }
74- }
75- . padding ( )
76-
77- if let lastKnownLoadedCardReader {
78- HStack {
79- Text ( " Model: \( lastKnownLoadedCardReader) " )
80- . font ( . posBodyMediumRegular( ) )
81- . foregroundStyle ( . secondary)
82- . multilineTextAlignment ( . center)
83- }
84- }
85-
8673 List {
74+ VStack ( spacing: POSPadding . xSmall) {
75+ HStack {
76+ Text ( Localization . readerModelTitle)
77+ . font ( . posBodyMediumRegular( ) )
78+ . foregroundStyle ( . primary)
79+ Spacer ( )
80+ Text ( cardReaderName)
81+ . font ( . posBodyMediumRegular( ) )
82+ . foregroundStyle ( . secondary)
83+ }
84+ . padding ( )
85+ HStack {
86+ Text ( Localization . readerBatteryTitle)
87+ . font ( . posBodyMediumRegular( ) )
88+ . foregroundStyle ( . primary)
89+ Spacer ( )
90+ Text ( formattedBatteryLevel)
91+ . font ( . posBodyMediumRegular( ) )
92+ . foregroundStyle ( . secondary)
93+ }
94+ . padding ( )
95+ }
8796 Button {
8897 showCardReaderDocumentationModal = true
8998 } label: {
@@ -106,18 +115,6 @@ struct PointOfSaleSettingsHardwareDetailView: View {
106115 . posFullScreenCover ( isPresented: $showCardReaderDocumentationModal) {
107116 SafariView ( url: WooConstants . URLs. inPersonPaymentsLearnMoreWCPay. asURL ( ) )
108117 }
109- . task { @MainActor in
110- // TODO: WOOMOB-1172
111- let action = AppSettingsAction . loadCardReader { reader in
112- switch reader {
113- case let . success( foundReader) :
114- lastKnownLoadedCardReader = foundReader
115- case let . failure( error) :
116- debugPrint ( error)
117- }
118- }
119- ServiceLocator . stores. dispatch ( action)
120- }
121118 }
122119
123120 private var scannersView : some View {
@@ -220,6 +217,30 @@ extension PointOfSaleSettingsHardwareDetailView {
220217
221218private extension PointOfSaleSettingsHardwareDetailView {
222219 enum Localization {
220+ static let readerModelTitle = NSLocalizedString (
221+ " pointOfSaleSettingsHardwareDetailView.readerModelTitle " ,
222+ value: " Model " ,
223+ comment: " Text displayed on Point of Sale settings pointing to the card reader model. "
224+ )
225+
226+ static let readerBatteryTitle = NSLocalizedString (
227+ " pointOfSaleSettingsHardwareDetailView.readerBatteryTitle " ,
228+ value: " Battery " ,
229+ comment: " Text displayed on Point of Sale settings pointing to the card reader battery. "
230+ )
231+
232+ static let cardReaderNotConnected = NSLocalizedString (
233+ " pointOfSaleSettingsHardwareDetailView.cardReaderNotConnected " ,
234+ value: " Reader not connected " ,
235+ comment: " Text displayed on Point of Sale settings when the card reader is not connected. "
236+ )
237+
238+ static let batteryLevelUnknown = NSLocalizedString (
239+ " pointOfSaleSettingsHardwareDetailView.batteryLevelUnknown " ,
240+ value: " Unknown " ,
241+ comment: " Text displayed on Point of Sale settings when card reader battery is unknown. "
242+ )
243+
223244 static let cardReadersTitle = NSLocalizedString (
224245 " pointOfSaleSettingsHardwareDetailView.cardReadersTitle " ,
225246 value: " Card readers " ,
@@ -256,30 +277,6 @@ private extension PointOfSaleSettingsHardwareDetailView {
256277 comment: " Subtitle describing barcode scanner documentation in Point of Sale settings. "
257278 )
258279
259- static let cardReadersDescription = NSLocalizedString (
260- " pointOfSaleSettingsHardwareDetailView.cardReadersDescription " ,
261- value: " Accept secure and fast payments in person " ,
262- comment: " Main description for card readers functionality in Point of Sale settings. "
263- )
264-
265- static let cardReadersSubtitle1 = NSLocalizedString (
266- " pointOfSaleSettingsHardwareDetailView.cardReadersSubtitle.1 " ,
267- value: " Make sure the card reader is charged " ,
268- comment: " Subtitle describing card reader connection in Point of Sale settings. "
269- )
270-
271- static let cardReadersSubtitle2 = NSLocalizedString (
272- " pointOfSaleSettingsHardwareDetailView.cardReadersSubtitle.2 " ,
273- value: " Turn the card reader on, and place it next to the mobile device " ,
274- comment: " Subtitle describing card reader connection in Point of Sale settings. "
275- )
276-
277- static let cardReadersSubtitle3 = NSLocalizedString (
278- " pointOfSaleSettingsHardwareDetailView.cardReadersSubtitle.3 " ,
279- value: " Turn the mobile device bluetooth on " ,
280- comment: " Subtitle describing card reader connection in Point of Sale settings. "
281- )
282-
283280 static let cardReaderDocumentationTitle = NSLocalizedString (
284281 " pointOfSaleSettingsHardwareDetailView.cardReaderDocumentationTitle " ,
285282 value: " Documentation " ,
@@ -317,3 +314,9 @@ private extension PointOfSaleSettingsHardwareDetailView {
317314 )
318315 }
319316}
317+
318+ #if DEBUG
319+ #Preview {
320+ PointOfSaleSettingsHardwareDetailView ( settingsController: PointOfSaleSettingsPreviewController ( ) )
321+ }
322+ #endif
0 commit comments