Almost done
This commit is contained in:
@@ -28,7 +28,6 @@ struct CheckoutView: View {
|
||||
@State var pixPaymentContext: PixPaymentContext? = nil
|
||||
@State var cardPaymentContext: CardPaymentContext? = nil
|
||||
@State var orderTrackingContext: OrderTrackingContext? = nil
|
||||
@State var savedCards: [SavedCard] = []
|
||||
@State var showCardSelectionSheet = false
|
||||
|
||||
var paymentConfig: StorePaymentMethodsInfo? { storeInfo?.paymentMethods }
|
||||
@@ -191,7 +190,6 @@ struct CheckoutView: View {
|
||||
items: appState.cart.toOrderItemsPayload()
|
||||
)
|
||||
CardSelectionSheet(
|
||||
savedCards: savedCards,
|
||||
cardContext: cardContext,
|
||||
appState: $appState,
|
||||
onSavedCardConfirmed: { cardId in
|
||||
@@ -209,11 +207,6 @@ struct CheckoutView: View {
|
||||
}
|
||||
)
|
||||
}
|
||||
.task(id: paymentMethod) {
|
||||
if paymentMethod == .creditCard && useInAppPayment {
|
||||
await loadSavedCards()
|
||||
}
|
||||
}
|
||||
.navigationDestination(item: $orderTrackingContext) { context in
|
||||
OrderTrackingView(orderId: context.orderId, initialShortId: context.shortId, postOrderBack: {
|
||||
appState.shouldNavigateToOrders = true
|
||||
@@ -957,24 +950,23 @@ struct PaymentPixView: View {
|
||||
// MARK: - CardSelectionSheet
|
||||
|
||||
struct CardSelectionSheet: View {
|
||||
let savedCards: [SavedCard]
|
||||
let cardContext: CardPaymentContext
|
||||
@Binding var appState: AppState
|
||||
let onSavedCardConfirmed: (String) -> Void
|
||||
let onOrderCreated: (String, String?) -> Void
|
||||
|
||||
@Environment(\.dismiss) var dismiss
|
||||
@State private var cards: [SavedCard] = []
|
||||
@State private var isLoading = false
|
||||
@State var selectedCardId: String?
|
||||
@State var isSubmitting = false
|
||||
@State var showNewCardSheet = false
|
||||
|
||||
init(savedCards: [SavedCard], cardContext: CardPaymentContext, appState: Binding<AppState>, onSavedCardConfirmed: @escaping (String) -> Void, onOrderCreated: @escaping (String, String?) -> Void) {
|
||||
self.savedCards = savedCards
|
||||
init(cardContext: CardPaymentContext, appState: Binding<AppState>, onSavedCardConfirmed: @escaping (String) -> Void, onOrderCreated: @escaping (String, String?) -> Void) {
|
||||
self.cardContext = cardContext
|
||||
self._appState = appState
|
||||
self.onSavedCardConfirmed = onSavedCardConfirmed
|
||||
self.onOrderCreated = onOrderCreated
|
||||
_selectedCardId = State(initialValue: savedCards.first(where: { $0.isDefault })?.id ?? savedCards.first?.id)
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
@@ -1004,11 +996,15 @@ struct CardSelectionSheet: View {
|
||||
|
||||
ScrollView(showsIndicators: false) {
|
||||
VStack(alignment: .leading, spacing: 16) {
|
||||
if savedCards.isEmpty == false {
|
||||
if isLoading {
|
||||
ProgressView()
|
||||
.frame(maxWidth: .infinity)
|
||||
.padding(.top, 32)
|
||||
} else if cards.isEmpty == false {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
ForEach(savedCards) { card in
|
||||
ForEach(cards) { card in
|
||||
savedCardRow(card)
|
||||
if card.id != savedCards.last?.id {
|
||||
if card.id != cards.last?.id {
|
||||
Divider().padding(.horizontal, 14)
|
||||
}
|
||||
}
|
||||
@@ -1066,6 +1062,17 @@ struct CardSelectionSheet: View {
|
||||
|
||||
SnackbarOverlay(center: SnackbarCenter.shared)
|
||||
}
|
||||
.task { await fetchCards() }
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private func fetchCards() async {
|
||||
isLoading = true
|
||||
defer { isLoading = false }
|
||||
if let result = try? await ApiService().listCards(), result.error == false, let fetched = result.result {
|
||||
cards = fetched
|
||||
selectedCardId = fetched.first(where: { $0.isDefault })?.id ?? fetched.first?.id
|
||||
}
|
||||
}
|
||||
|
||||
private func savedCardRow(_ card: SavedCard) -> some View {
|
||||
|
||||
Reference in New Issue
Block a user