CustomerAddress.id is genuinely optional (Services/ApiModels.swift:46) — some address book entries have no id. AddressesView.selectAddress sets appState.address.selectedId = address.id directly with no fallback, so picking one of those addresses leaves selectedId nil. The matching cascade in both CartView and CheckoutView+Logic then skipped straight to a label match, which silently collides whenever two addresses share an empty or duplicate label (common for unnamed entries), and finally fell back to addresses.first — always redisplaying whatever's first in the list regardless of what was tapped, with no error surfaced anywhere. Coordinates are set immediately and reliably at selection time and are far less likely to collide than a label. Checkout already had a lat/lng fallback but ordered after the weak label match; promoted it ahead of label matching in both files, and added the same fallback to Cart, which didn't have one at all.
382 lines
15 KiB
Swift
382 lines
15 KiB
Swift