Skip to content

Commit 2845357

Browse files
committed
Perform a one time binding in the view model for setup
1 parent b4ea532 commit 2845357

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ struct EditAddressForm: View {
136136
.disabled(!viewModel.isDoneButtonEnabled))
137137
.redacted(reason: viewModel.showPlaceholders ? .placeholder : [])
138138
.shimmering(active: viewModel.showPlaceholders)
139+
.onAppear {
140+
viewModel.onLoadTrigger.send()
141+
}
139142

140143
// Go to edit country
141144
LazyNavigationLink(destination: FilterListSelector(viewModel: viewModel.createCountryViewModel()), isActive: $showCountrySelector) {

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,33 @@ final class EditAddressFormViewModel: ObservableObject {
2727
///
2828
private let stores: StoresManager
2929

30+
/// Store for publishers subscriptions
31+
///
32+
private var subscriptions = Set<AnyCancellable>()
33+
34+
3035
init(siteID: Int64, address: Address?, storageManager: StorageManagerType = ServiceLocator.storageManager, stores: StoresManager = ServiceLocator.stores) {
3136
self.siteID = siteID
3237
self.originalAddress = address ?? .empty
3338
self.storageManager = storageManager
3439
self.stores = stores
3540
updateFieldsWithOriginalAddress()
36-
bindSyncTrigger()
37-
fetchStoredCountriesAndTriggerSyncIfNeeded()
41+
42+
// Listen only to the first emitted event.
43+
onLoadTrigger.first().sink {
44+
self.bindSyncTrigger()
45+
self.fetchStoredCountriesAndTriggerSyncIfNeeded()
46+
}.store(in: &subscriptions)
3847
}
3948

4049
/// Original `Address` model.
4150
///
4251
private let originalAddress: Address
4352

53+
/// Trigger to perform any one time setups.
54+
///
55+
let onLoadTrigger: PassthroughSubject<Void, Never> = PassthroughSubject()
56+
4457
// MARK: User Fields
4558

4659
@Published var firstName: String = ""

0 commit comments

Comments
 (0)