11import SwiftUI
22
33struct POSSettingsLocalCatalogDetailView : View {
4- // TODO: WOOMOB-1335 - implement full sync cellular data setting functionality
54 private let viewModel : POSSettingsLocalCatalogViewModel
65
76 init ( viewModel: POSSettingsLocalCatalogViewModel ) {
@@ -35,96 +34,63 @@ struct POSSettingsLocalCatalogDetailView: View {
3534private extension POSSettingsLocalCatalogDetailView {
3635 @ViewBuilder
3736 var catalogStatus : some View {
38- VStack ( spacing: POSSpacing . none) {
39- sectionHeaderView ( title: Localization . catalogStatus)
40-
41- VStack ( spacing: POSSpacing . medium) {
42- fieldRowView ( label: Localization . catalogSize, value: viewModel. catalogSize)
43- fieldRowView ( label: Localization . lastIncrementalUpdate, value: viewModel. lastIncrementalSyncDate)
44- fieldRowView ( label: Localization . lastFullSync, value: viewModel. lastFullSyncDate)
37+ POSInformationCard {
38+ VStack ( spacing: POSSpacing . small) {
39+ POSInformationCardFieldRow (
40+ label: Localization . catalogSize,
41+ value: viewModel. catalogSize
42+ )
43+ POSInformationCardFieldRow (
44+ label: Localization . lastIncrementalSync,
45+ value: viewModel. lastIncrementalSyncDate
46+ )
47+ POSInformationCardFieldRow (
48+ label: Localization . lastFullSync,
49+ value: viewModel. lastFullSyncDate,
50+ showSeparator: false
51+ )
4552 }
46- . padding ( . bottom, POSPadding . medium)
47- . redacted ( reason: viewModel. isLoading ? . placeholder : [ ] )
48- . shimmering ( active: viewModel. isLoading)
4953 }
54+ . redacted ( reason: viewModel. isLoading ? . placeholder : [ ] )
55+ . shimmering ( active: viewModel. isLoading)
5056 }
5157
5258 @ViewBuilder
5359 var managingDataUsage : some View {
5460 @Bindable var viewModel = viewModel
5561 VStack ( spacing: POSSpacing . none) {
56- sectionHeaderView ( title: Localization . managingDataUsage)
57-
58- VStack ( spacing: POSSpacing . medium) {
59- toggleRowView ( label: Localization . allowFullSyncOnCellular, isOn: $viewModel. allowFullSyncOnCellular)
62+ POSInformationCard {
63+ POSInformationCardFieldRowWithToggle (
64+ label: Localization . managingDataUsage,
65+ value: Localization . allowSyncOnCellular,
66+ showSeparator: false ,
67+ isOn: $viewModel. allowFullSyncOnCellular
68+ )
6069 }
61- . padding ( . bottom, POSPadding . medium)
6270 }
6371 }
6472
6573 @ViewBuilder
6674 var manualCatalogUpdate : some View {
6775 VStack ( spacing: POSSpacing . none) {
68- sectionHeaderView ( title: Localization . manualCatalogUpdate)
69-
70- VStack ( spacing: POSSpacing . medium) {
71- Text ( Localization . manualUpdateInfo)
72- . font ( . posCaptionRegular)
73- . foregroundStyle ( . secondary)
74- . frame ( maxWidth: . infinity, alignment: . leading)
75-
76- Button ( action: {
77- Task {
78- await viewModel. refreshCatalog ( )
79- }
80- } ) {
81- Text ( Localization . refreshCatalog)
82- }
83- . buttonStyle ( POSFilledButtonStyle ( size: . normal, isLoading: viewModel. isRefreshingCatalog) )
76+ POSInformationCard {
77+ POSInformationCardFieldRow (
78+ label: Localization . manualCatalogUpdate,
79+ value: Localization . manualUpdateInfo,
80+ showSeparator: false ,
81+ labelStyle: . bold,
82+ buttonTitle: Localization . updateCatalog,
83+ buttonAction: {
84+ Task {
85+ await viewModel. refreshCatalog ( )
86+ }
87+ } ,
88+ buttonStyle: . primary,
89+ isLoading: viewModel. isRefreshingCatalog
90+ )
8491 }
85- . padding ( . horizontal, POSPadding . medium)
86- . padding ( . bottom, POSPadding . medium)
87- }
88- }
89-
90- @ViewBuilder
91- func sectionHeaderView( title: String ) -> some View {
92- ZStack {
93- Style . backgroundColor
94- Text ( title)
95- . font ( . posBodyLargeBold)
96- . foregroundColor ( . posOnSurface)
97- . frame ( maxWidth: . infinity, alignment: . leading)
98- . padding ( . horizontal, POSPadding . medium)
99- . padding ( . vertical, POSPadding . small)
10092 }
10193 }
102-
103- @ViewBuilder
104- func fieldRowView( label: String , value: String ) -> some View {
105- VStack ( alignment: . leading, spacing: POSPadding . small) {
106- Text ( label)
107- . font ( . posBodyMediumRegular( ) )
108- Text ( value)
109- . font ( . posBodyMediumRegular( ) )
110- . foregroundStyle ( . secondary)
111- }
112- . frame ( maxWidth: . infinity, alignment: . leading)
113- . padding ( . horizontal, POSPadding . medium)
114- }
115-
116- @ViewBuilder
117- func toggleRowView( label: String , isOn: Binding < Bool > ) -> some View {
118- HStack {
119- Text ( label)
120- . font ( . posBodyMediumRegular( ) )
121- Spacer ( )
122- Toggle ( " " , isOn: isOn)
123- . toggleStyle ( SwitchToggleStyle ( ) )
124- }
125- . frame ( maxWidth: . infinity, alignment: . leading)
126- . padding ( . horizontal, POSPadding . medium)
127- }
12894}
12995
13096private extension POSSettingsLocalCatalogDetailView {
@@ -134,65 +100,57 @@ private extension POSSettingsLocalCatalogDetailView {
134100
135101 enum Localization {
136102 static let localCatalogTitle = NSLocalizedString (
137- " posSettingsLocalCatalogDetailView.title " ,
138- value: " Catalog Settings " ,
103+ " posSettingsLocalCatalogDetailView.title.1 " ,
104+ value: " Product catalog " ,
139105 comment: " Navigation title for the local catalog details in POS settings. "
140106 )
141107
142- static let catalogStatus = NSLocalizedString (
143- " posSettingsLocalCatalogDetailView.catalogStatus " ,
144- value: " Catalog Status " ,
145- comment: " Section title for catalog status in Point of Sale settings. "
146- )
147-
148108 static let managingDataUsage = NSLocalizedString (
149- " posSettingsLocalCatalogDetailView.managingDataUsage.1 " ,
150- value: " Managing Data Usage " ,
109+ " posSettingsLocalCatalogDetailView.managingDataUsage.2 " ,
110+ value: " Cellular data " ,
151111 comment: " Section title for managing data usage in Point of Sale settings. "
152112 )
153113
154- static let lastIncrementalUpdate = NSLocalizedString (
155- " posSettingsLocalCatalogDetailView.lastIncrementalSync " ,
156- value: " Last update " ,
157- comment: " Label for last incremental update field in Point of Sale settings. "
114+ static let lastIncrementalSync = NSLocalizedString (
115+ " posSettingsLocalCatalogDetailView.lastIncrementalSync.1 " ,
116+ value: " Last incremental sync " ,
117+ comment: " Label for last incremental sync field in Point of Sale settings. "
158118 )
159119
160120 static let lastFullSync = NSLocalizedString (
161- " posSettingsLocalCatalogDetailView.lastFullSync.1 " ,
162- value: " Last full update " ,
121+ " posSettingsLocalCatalogDetailView.lastFullSync.2 " ,
122+ value: " Last full sync " ,
163123 comment: " Label for last full sync field in Point of Sale settings. "
164124 )
165125
166126 static let catalogSize = NSLocalizedString (
167- " posSettingsLocalCatalogDetailView.catalogSize " ,
168- value: " Catalog size " ,
127+ " posSettingsLocalCatalogDetailView.catalogSize.1 " ,
128+ value: " Size " ,
169129 comment: " Label for catalog size field in Point of Sale settings. "
170130 )
171131
172-
173- static let allowFullSyncOnCellular = NSLocalizedString (
174- " posSettingsLocalCatalogDetailView.allowFullSyncOnCellular.1 " ,
175- value: " Allow full update on cellular data " ,
176- comment: " Label for allow full sync on cellular data toggle in Point of Sale settings. "
132+ static let allowSyncOnCellular = NSLocalizedString (
133+ " posSettingsLocalCatalogDetailView.allowSyncOnCellular.2 " ,
134+ value: " Allow sync using cellular data " ,
135+ comment: " Label for allow sync on cellular data toggle in Point of Sale settings. "
177136 )
178137
179-
180138 static let manualCatalogUpdate = NSLocalizedString (
181- " posSettingsLocalCatalogDetailView.manualCatalogUpdate " ,
182- value: " Manual Catalog Update " ,
139+ " posSettingsLocalCatalogDetailView.manualCatalogUpdate.1 " ,
140+ value: " Catalog update " ,
183141 comment: " Section title for manual catalog update in Point of Sale settings. "
184142 )
185143
186144 static let manualUpdateInfo = NSLocalizedString (
187- " posSettingsLocalCatalogDetailView.manualUpdateInfo " ,
188- value: " Use this refresh only when something seems off - POS keeps data current automatically. " ,
189- comment: " Info text explaining when to use manual catalog update. "
145+ " posSettingsLocalCatalogDetailView.manualUpdateInfo.1 " ,
146+ value: " Update the catalog manually " ,
147+ comment: " Info text explaining the usage of the manual catalog update button . "
190148 )
191149
192- static let refreshCatalog = NSLocalizedString (
193- " posSettingsLocalCatalogDetailView.refreshCatalog " ,
194- value: " Refresh catalog" ,
195- comment: " Button text for refreshing the catalog manually. "
150+ static let updateCatalog = NSLocalizedString (
151+ " posSettingsLocalCatalogDetailView.updateCatalog " ,
152+ value: " Update catalog" ,
153+ comment: " Button text for updating the catalog manually. "
196154 )
197155 }
198156}
0 commit comments