@@ -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 }
0 commit comments