Skip to content

Commit a55f7af

Browse files
authored
Merge pull request #4959 from woocommerce/issue/4599-new-package-details
Shipping Labels: New packages form to support multiple packages
2 parents 63e73db + 49cf815 commit a55f7af

File tree

9 files changed

+604
-15
lines changed

9 files changed

+604
-15
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import SwiftUI
2+
3+
struct ShippingLabelPackageItem: View {
4+
5+
@ObservedObject private var viewModel: ShippingLabelPackageItemViewModel
6+
@State private var isCollapsed: Bool = false
7+
@State private var isShowingPackageSelection = false
8+
9+
private let isCollapsible: Bool
10+
private let packageNumber: Int
11+
private let safeAreaInsets: EdgeInsets
12+
13+
init(packageNumber: Int,
14+
isCollapsible: Bool,
15+
safeAreaInsets: EdgeInsets,
16+
viewModel: ShippingLabelPackageItemViewModel) {
17+
self.packageNumber = packageNumber
18+
self.isCollapsible = isCollapsible
19+
self.safeAreaInsets = safeAreaInsets
20+
self.viewModel = viewModel
21+
self.isCollapsed = packageNumber > 1
22+
}
23+
24+
var body: some View {
25+
CollapsibleView(isCollapsible: isCollapsible, isCollapsed: $isCollapsed, safeAreaInsets: safeAreaInsets) {
26+
// TODO-4599 - Update view
27+
ShippingLabelPackageNumberRow(packageNumber: packageNumber, numberOfItems: 1)
28+
} content: {
29+
// TODO-4599 - Update view
30+
EmptyView()
31+
}
32+
}
33+
}
34+
35+
struct ShippingLabelPackageItem_Previews: PreviewProvider {
36+
static var previews: some View {
37+
let order = ShippingLabelPackageDetailsViewModel.sampleOrder()
38+
let packageResponse = ShippingLabelPackageDetailsViewModel.samplePackageDetails()
39+
let viewModel = ShippingLabelPackageItemViewModel(order: order,
40+
orderItems: order.items,
41+
packagesResponse: packageResponse,
42+
selectedPackageID: "Box 1",
43+
totalWeight: "",
44+
products: [],
45+
productVariations: [])
46+
ShippingLabelPackageItem(packageNumber: 1, isCollapsible: true, safeAreaInsets: .zero, viewModel: viewModel)
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import SwiftUI
2+
3+
struct ShippingLabelPackagesForm: View {
4+
@ObservedObject private var viewModel: ShippingLabelPackagesFormViewModel
5+
@Environment(\.presentationMode) var presentation
6+
7+
init(viewModel: ShippingLabelPackagesFormViewModel) {
8+
self.viewModel = viewModel
9+
ServiceLocator.analytics.track(.shippingLabelPurchaseFlow, withProperties: ["state": "packages_started"])
10+
}
11+
12+
var body: some View {
13+
GeometryReader { geometry in
14+
ScrollView {
15+
ForEach(Array(viewModel.itemViewModels.enumerated()), id: \.offset) { index, element in
16+
ShippingLabelPackageItem(packageNumber: index + 1,
17+
isCollapsible: viewModel.foundMultiplePackages,
18+
safeAreaInsets: geometry.safeAreaInsets,
19+
viewModel: element)
20+
}
21+
.padding(.bottom, insets: geometry.safeAreaInsets)
22+
}
23+
.background(Color(.listBackground))
24+
.ignoresSafeArea(.container, edges: [.horizontal, .bottom])
25+
}
26+
.navigationTitle(Localization.title)
27+
.navigationBarItems(trailing: Button(action: {
28+
ServiceLocator.analytics.track(.shippingLabelPurchaseFlow,
29+
withProperties: ["state": "packages_selected"])
30+
// TODO-4599: Update selection
31+
presentation.wrappedValue.dismiss()
32+
}, label: {
33+
Text(Localization.doneButton)
34+
}))
35+
}
36+
}
37+
38+
private extension ShippingLabelPackagesForm {
39+
enum Localization {
40+
static let title = NSLocalizedString("Package Details",
41+
comment: "Navigation bar title of shipping label package details screen")
42+
static let doneButton = NSLocalizedString("Done", comment: "Done navigation button in the Package Details screen in Shipping Label flow")
43+
}
44+
45+
enum Constants {
46+
static let dividerPadding: CGFloat = 16
47+
}
48+
}
49+
50+
struct ShippingLabelPackagesForm_Previews: PreviewProvider {
51+
static var previews: some View {
52+
let viewModel = ShippingLabelPackagesFormViewModel(order: ShippingLabelPackagesFormViewModel.sampleOrder(),
53+
packagesResponse: ShippingLabelPackagesFormViewModel.samplePackageDetails(),
54+
selectedPackages: [])
55+
56+
ShippingLabelPackagesForm(viewModel: viewModel)
57+
.environment(\.colorScheme, .light)
58+
.previewDisplayName("Light")
59+
60+
ShippingLabelPackagesForm(viewModel: viewModel)
61+
.environment(\.colorScheme, .dark)
62+
.previewDisplayName("Dark")
63+
}
64+
}

0 commit comments

Comments
 (0)