Skip to content

Commit b497e69

Browse files
authored
Merge pull request #6038 from woocommerce/issue/5412-address-form-improvements
Order Creation: Address form improvements
2 parents b622d7b + 3f45e55 commit b497e69

File tree

3 files changed

+405
-5
lines changed

3 files changed

+405
-5
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/AddressFormViewModelProtocol.swift

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ struct AddressFormFields {
164164
// When a country is selected, check if the new country has a state list.
165165
// If it has, clear the selected state and its name in fields.
166166
// If it doesn't only clear the selected state.
167-
if selectedCountry?.states.isEmpty == false, selectedState != nil {
167+
if selectedCountry?.states.isEmpty == false {
168168
self.state = ""
169169
}
170170
self.selectedState = nil
@@ -189,8 +189,9 @@ struct AddressFormFields {
189189
return
190190
}
191191

192+
let initialStateValue = state // storing initial state value because it will be cleared by selectedCountry setter
192193
selectedCountry = allCountries.first { $0.code == country }
193-
selectedState = selectedCountry?.states.first { $0.code == state }
194+
selectedState = selectedCountry?.states.first { $0.code == initialStateValue }
194195
}
195196
}
196197

@@ -430,8 +431,9 @@ private extension AddressFormViewModel {
430431
/// Calculates what navigation trailing item should be shown depending on our internal state.
431432
///
432433
func bindNavigationTrailingItemPublisher() {
433-
Publishers.CombineLatest3($fields, $secondaryFields, performingNetworkRequest)
434-
.map { [originalAddress, secondaryOriginalAddress] fields, secondaryFields, performingNetworkRequest -> AddressFormNavigationItem in
434+
Publishers.CombineLatest4($fields, $secondaryFields, $showDifferentAddressForm, performingNetworkRequest)
435+
.map { [originalAddress, secondaryOriginalAddress]
436+
fields, secondaryFields, showDifferentAddressForm, performingNetworkRequest -> AddressFormNavigationItem in
435437
guard !performingNetworkRequest else {
436438
return .loading
437439
}
@@ -440,7 +442,13 @@ private extension AddressFormViewModel {
440442
return .done(enabled: true)
441443
}
442444

443-
return .done(enabled: originalAddress != fields.toAddress() || secondaryOriginalAddress != secondaryFields.toAddress())
445+
let addressesAreDifferentButSecondAddressSwitchIsDisabled = secondaryOriginalAddress != .empty &&
446+
originalAddress != secondaryOriginalAddress &&
447+
!showDifferentAddressForm
448+
449+
return .done(enabled: addressesAreDifferentButSecondAddressSwitchIsDisabled ||
450+
originalAddress != fields.toAddress() ||
451+
secondaryOriginalAddress != secondaryFields.toAddress())
444452
}
445453
.assign(to: &$navigationTrailingItem)
446454
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,7 @@
986986
AE457813275644590092F687 /* OrderStatusSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE457812275644590092F687 /* OrderStatusSection.swift */; };
987987
AE6DBE3B2732CAAD00957E7A /* AdaptiveStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6DBE3A2732CAAD00957E7A /* AdaptiveStack.swift */; };
988988
AE77EA5027A47C99006A21BD /* View+AddingDividers.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE77EA4F27A47C99006A21BD /* View+AddingDividers.swift */; };
989+
AE90475C27A99D6000073E1D /* CreateOrderAddressFormViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE90475B27A99D6000073E1D /* CreateOrderAddressFormViewModelTests.swift */; };
989990
AE9E04752776213E003FA09E /* OrderCustomerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE9E04742776213E003FA09E /* OrderCustomerSection.swift */; };
990991
AEA622B2274669D3002A9B57 /* AddOrderCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEA622B1274669D3002A9B57 /* AddOrderCoordinator.swift */; };
991992
AEA622B427466B78002A9B57 /* BottomSheetOrderType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEA622B327466B78002A9B57 /* BottomSheetOrderType.swift */; };
@@ -2573,6 +2574,7 @@
25732574
AE457812275644590092F687 /* OrderStatusSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStatusSection.swift; sourceTree = "<group>"; };
25742575
AE6DBE3A2732CAAD00957E7A /* AdaptiveStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveStack.swift; sourceTree = "<group>"; };
25752576
AE77EA4F27A47C99006A21BD /* View+AddingDividers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+AddingDividers.swift"; sourceTree = "<group>"; };
2577+
AE90475B27A99D6000073E1D /* CreateOrderAddressFormViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateOrderAddressFormViewModelTests.swift; sourceTree = "<group>"; };
25762578
AE9E04742776213E003FA09E /* OrderCustomerSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderCustomerSection.swift; sourceTree = "<group>"; };
25772579
AEA622B1274669D3002A9B57 /* AddOrderCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddOrderCoordinator.swift; sourceTree = "<group>"; };
25782580
AEA622B327466B78002A9B57 /* BottomSheetOrderType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomSheetOrderType.swift; sourceTree = "<group>"; };
@@ -6211,6 +6213,7 @@
62116213
CC53FB3D2758E2D500C4CA4F /* ProductRowViewModelTests.swift */,
62126214
CC53FB3F2759042600C4CA4F /* AddProductToOrderViewModelTests.swift */,
62136215
CC13C0CC278E086D00C0B5B5 /* AddProductVariationToOrderViewModelTests.swift */,
6216+
AE90475B27A99D6000073E1D /* CreateOrderAddressFormViewModelTests.swift */,
62146217
);
62156218
path = "Order Creation";
62166219
sourceTree = "<group>";
@@ -9227,6 +9230,7 @@
92279230
023EC2E024DA87460021DA91 /* ProductInventorySettingsViewModelTests.swift in Sources */,
92289231
AEB73C1725CD8E5800A8454A /* AttributePickerViewModelTests.swift in Sources */,
92299232
02DE5CAB279F8754007CBEF3 /* Double+RoundingTests.swift in Sources */,
9233+
AE90475C27A99D6000073E1D /* CreateOrderAddressFormViewModelTests.swift in Sources */,
92309234
B56C721421B5BBC000E5E85B /* MockStoresManager.swift in Sources */,
92319235
26B119C024D0C69500FED5C7 /* SurveyViewControllerTests.swift in Sources */,
92329236
D8AB131E225DC25F002BB5D1 /* MockOrders.swift in Sources */,

0 commit comments

Comments
 (0)