Skip to content

Commit 391e311

Browse files
authored
Shipping Labels: Initial navigation for HAZMAT row (#15352)
2 parents ae0994e + 8193a5b commit 391e311

File tree

6 files changed

+129
-45
lines changed

6 files changed

+129
-45
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShipping Hazmat Section/WooShippingHazmat.swift

Lines changed: 0 additions & 40 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import SwiftUI
2+
3+
struct WooShippingHazmatDetailView: View {
4+
@Environment(\.dismiss) private var dismiss
5+
6+
@Binding private var isHazardous: Bool
7+
8+
init(isHazardous: Binding<Bool>) {
9+
self._isHazardous = isHazardous
10+
}
11+
12+
var body: some View {
13+
ScrollView {
14+
VStack {
15+
HStack {
16+
Button(Localization.cancel) {
17+
dismiss()
18+
}
19+
.padding(.vertical)
20+
Spacer()
21+
}
22+
23+
Text(Localization.title)
24+
.secondaryTitleStyle()
25+
.bold()
26+
27+
Spacer()
28+
}
29+
.padding(.horizontal)
30+
}
31+
}
32+
}
33+
34+
private extension WooShippingHazmatDetailView {
35+
enum Localization {
36+
static let title = NSLocalizedString(
37+
"wooShippingHazmatDetailView.title",
38+
value: "Are you shipping dangerous goods or hazardous materials?",
39+
comment: "Title of the HAZMAT detail view in the shipping label creation flow"
40+
)
41+
static let cancel = NSLocalizedString(
42+
"wooShippingHazmatDetailView.cancel",
43+
value: "Cancel",
44+
comment: "Button to dismiss the HAZMAT detail view in the shipping label creation flow"
45+
)
46+
}
47+
}
48+
49+
#Preview {
50+
WooShippingHazmatDetailView(isHazardous: .constant(true))
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import SwiftUI
2+
3+
struct WooShippingHazmatRow: View {
4+
/// Whether the interactions (navigation/setting selection) are enabled.
5+
private let enabled: Bool
6+
7+
@Binding private var isHazardous: Bool
8+
9+
@State private var isShowingDetailView = false
10+
11+
init(isHazardous: Binding<Bool>, enabled: Bool) {
12+
self._isHazardous = isHazardous
13+
self.enabled = enabled
14+
}
15+
16+
var body: some View {
17+
Button(action: {
18+
isShowingDetailView = true
19+
}) {
20+
AdaptiveStack {
21+
Text(Localization.hazmatLabel)
22+
.bodyStyle()
23+
Spacer()
24+
Text(isHazardous ? Localization.yes : Localization.no)
25+
.secondaryBodyStyle()
26+
Image(uiImage: .chevronImage)
27+
.secondaryBodyStyle()
28+
.renderedIf(enabled)
29+
}
30+
.padding(.vertical, Layout.verticalPadding)
31+
}
32+
.buttonStyle(.plain)
33+
.disabled(!enabled)
34+
.sheet(isPresented: $isShowingDetailView) {
35+
WooShippingHazmatDetailView(isHazardous: $isHazardous)
36+
}
37+
}
38+
}
39+
40+
private extension WooShippingHazmatRow {
41+
enum Layout {
42+
static let backgroundRadius: CGFloat = 8
43+
static let verticalPadding: CGFloat = 24
44+
}
45+
46+
enum Localization {
47+
static let hazmatLabel = NSLocalizedString("wooShipping.createLabel.hazmatRow.label",
48+
value: "Are you shipping dangerous goods or hazardous materials?",
49+
comment: "Label for section in shipping label creation to declare when a package contains hazardous materials.")
50+
static let yes = NSLocalizedString(
51+
"wooShipping.createLabel.hazmatRow.yes",
52+
value: "Yes",
53+
comment: "Value for section in shipping label creation to declare when a package contains hazardous materials."
54+
)
55+
static let no = NSLocalizedString(
56+
"wooShipping.createLabel.hazmatRow.no",
57+
value: "No",
58+
comment: "Value for section in shipping label creation to declare when a package does not contain hazardous materials."
59+
)
60+
}
61+
}
62+
63+
#Preview {
64+
WooShippingHazmatRow(isHazardous: .constant(false), enabled: true)
65+
.padding()
66+
}

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShippingCreateLabelsView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ private extension WooShippingCreateLabelsView {
106106

107107
WooShippingItems(viewModel: viewModel.items)
108108

109-
WooShippingHazmat(enabled: !viewModel.canViewLabel)
109+
WooShippingHazmatRow(isHazardous: $viewModel.containsHazardousMaterials,
110+
enabled: !viewModel.canViewLabel)
110111

111112
WooShippingCustomsRow(informationIsCompleted: viewModel.customsInformationIsCompleted,
112113
customsFormViewModel: viewModel.customsFormViewModel)

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/WooShipping Create Shipping Labels/WooShippingCreateLabelsViewModel.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ final class WooShippingCreateLabelsViewModel: ObservableObject {
2121
private var subscriptions: Set<AnyCancellable> = []
2222
private var debounceDuration: Double = 1
2323

24+
@Published var containsHazardousMaterials = false
25+
2426
@Published var labelPurchaseErrorNotice: Notice?
2527

2628
let order: Order

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2361,7 +2361,7 @@
23612361
CE755F752D4A6BF3002539F6 /* WooShippingNormalizeAddressViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE755F742D4A6BF3002539F6 /* WooShippingNormalizeAddressViewModelTests.swift */; };
23622362
CE755F772D4A79C8002539F6 /* WooShippingAddress+Woo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE755F762D4A79C2002539F6 /* WooShippingAddress+Woo.swift */; };
23632363
CE7B4A582CA191FB00F764EB /* WooShippingItemRowViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7B4A572CA191F400F764EB /* WooShippingItemRowViewModelTests.swift */; };
2364-
CE7B4A5B2CA1BF9900F764EB /* WooShippingHazmat.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7B4A5A2CA1BF9900F764EB /* WooShippingHazmat.swift */; };
2364+
CE7B4A5B2CA1BF9900F764EB /* WooShippingHazmatRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7B4A5A2CA1BF9900F764EB /* WooShippingHazmatRow.swift */; };
23652365
CE7CEC2D2C2EF0E50066FD53 /* GoogleAdsCampaignReportCardViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7CEC2C2C2EF0E50066FD53 /* GoogleAdsCampaignReportCardViewModelTests.swift */; };
23662366
CE7F778B2C074D2500C89F4E /* EditableOrderShippingLineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7F778A2C074D2500C89F4E /* EditableOrderShippingLineViewModel.swift */; };
23672367
CE7F778D2C0770FF00C89F4E /* EditableOrderShippingLineViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7F778C2C0770FF00C89F4E /* EditableOrderShippingLineViewModelTests.swift */; };
@@ -2793,6 +2793,7 @@
27932793
DEC0293729C418FF00FD0E2F /* ApplicationPasswordAuthorizationWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC0293629C418FF00FD0E2F /* ApplicationPasswordAuthorizationWebViewController.swift */; };
27942794
DEC0293A29C41BC500FD0E2F /* ApplicationPasswordAuthorizationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC0293929C41BC500FD0E2F /* ApplicationPasswordAuthorizationViewModel.swift */; };
27952795
DEC1508227F450AC00F4487C /* CouponAllowedEmails.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC1508127F450AC00F4487C /* CouponAllowedEmails.swift */; };
2796+
DEC17AE02D82C513005A6E6D /* WooShippingHazmatDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC17ADF2D82C513005A6E6D /* WooShippingHazmatDetailView.swift */; };
27962797
DEC2961F26BD1605005A056B /* ShippingLabelCustomsFormListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC2961E26BD1605005A056B /* ShippingLabelCustomsFormListViewModel.swift */; };
27972798
DEC2962126BD1627005A056B /* ShippingLabelCustomsFormList.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC2962026BD1627005A056B /* ShippingLabelCustomsFormList.swift */; };
27982799
DEC2962326BD4E6E005A056B /* ShippingLabelCustomsFormInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC2962226BD4E6E005A056B /* ShippingLabelCustomsFormInput.swift */; };
@@ -5561,7 +5562,7 @@
55615562
CE755F742D4A6BF3002539F6 /* WooShippingNormalizeAddressViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooShippingNormalizeAddressViewModelTests.swift; sourceTree = "<group>"; };
55625563
CE755F762D4A79C2002539F6 /* WooShippingAddress+Woo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WooShippingAddress+Woo.swift"; sourceTree = "<group>"; };
55635564
CE7B4A572CA191F400F764EB /* WooShippingItemRowViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooShippingItemRowViewModelTests.swift; sourceTree = "<group>"; };
5564-
CE7B4A5A2CA1BF9900F764EB /* WooShippingHazmat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooShippingHazmat.swift; sourceTree = "<group>"; };
5565+
CE7B4A5A2CA1BF9900F764EB /* WooShippingHazmatRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooShippingHazmatRow.swift; sourceTree = "<group>"; };
55655566
CE7CEC2C2C2EF0E50066FD53 /* GoogleAdsCampaignReportCardViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleAdsCampaignReportCardViewModelTests.swift; sourceTree = "<group>"; };
55665567
CE7F778A2C074D2500C89F4E /* EditableOrderShippingLineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditableOrderShippingLineViewModel.swift; sourceTree = "<group>"; };
55675568
CE7F778C2C0770FF00C89F4E /* EditableOrderShippingLineViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditableOrderShippingLineViewModelTests.swift; sourceTree = "<group>"; };
@@ -5994,6 +5995,7 @@
59945995
DEC0293629C418FF00FD0E2F /* ApplicationPasswordAuthorizationWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordAuthorizationWebViewController.swift; sourceTree = "<group>"; };
59955996
DEC0293929C41BC500FD0E2F /* ApplicationPasswordAuthorizationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationPasswordAuthorizationViewModel.swift; sourceTree = "<group>"; };
59965997
DEC1508127F450AC00F4487C /* CouponAllowedEmails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CouponAllowedEmails.swift; sourceTree = "<group>"; };
5998+
DEC17ADF2D82C513005A6E6D /* WooShippingHazmatDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WooShippingHazmatDetailView.swift; sourceTree = "<group>"; };
59975999
DEC2961E26BD1605005A056B /* ShippingLabelCustomsFormListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelCustomsFormListViewModel.swift; sourceTree = "<group>"; };
59986000
DEC2962026BD1627005A056B /* ShippingLabelCustomsFormList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelCustomsFormList.swift; sourceTree = "<group>"; };
59996001
DEC2962226BD4E6E005A056B /* ShippingLabelCustomsFormInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelCustomsFormInput.swift; sourceTree = "<group>"; };
@@ -12337,7 +12339,8 @@
1233712339
CE7B4A592CA1BF7800F764EB /* WooShipping Hazmat Section */ = {
1233812340
isa = PBXGroup;
1233912341
children = (
12340-
CE7B4A5A2CA1BF9900F764EB /* WooShippingHazmat.swift */,
12342+
CE7B4A5A2CA1BF9900F764EB /* WooShippingHazmatRow.swift */,
12343+
DEC17ADF2D82C513005A6E6D /* WooShippingHazmatDetailView.swift */,
1234112344
);
1234212345
path = "WooShipping Hazmat Section";
1234312346
sourceTree = "<group>";
@@ -15554,6 +15557,7 @@
1555415557
025C00BA25514A7100FAC222 /* BarcodeScannerFrameScaler.swift in Sources */,
1555515558
EE9D031B2B89E4470077CED1 /* FilterOrdersByProduct+Analytics.swift in Sources */,
1555615559
20C6E7512CDE4AEA00CD124C /* ItemListState.swift in Sources */,
15560+
DEC17AE02D82C513005A6E6D /* WooShippingHazmatDetailView.swift in Sources */,
1555715561
86967D812B4E21C600C20CA8 /* BlazeAddParameterViewModel.swift in Sources */,
1555815562
EE45E2B92A409BA40085F227 /* ProductDescriptionAITooltipUseCase.swift in Sources */,
1555915563
DE02ABBA2B56981C008E0AC4 /* BlazeConfirmPaymentView.swift in Sources */,
@@ -15967,7 +15971,7 @@
1596715971
0212276324498CDC0042161F /* ProductFormBottomSheetAction.swift in Sources */,
1596815972
03B9E5272A14EA89005C77F5 /* CardReaderSupportDeterminer.swift in Sources */,
1596915973
DEF8CF1629A8C2EB00800A60 /* AdminRoleRequiredView.swift in Sources */,
15970-
CE7B4A5B2CA1BF9900F764EB /* WooShippingHazmat.swift in Sources */,
15974+
CE7B4A5B2CA1BF9900F764EB /* WooShippingHazmatRow.swift in Sources */,
1597115975
0258B4D82B1590A3008FEA07 /* ConfigurableBundleNoticeView.swift in Sources */,
1597215976
DEA0D0682BA82EA2007786F2 /* StatsGranularityV4+UI.swift in Sources */,
1597315977
DE69C54D27BB719A000BB888 /* CouponRestrictions.swift in Sources */,

0 commit comments

Comments
 (0)