From 9841f956c16ba87809b20a1332c6af2afa297873 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Sun, 25 Oct 2026 14:14:10 -0400 Subject: [PATCH 1/2] fix(group-send): close only from the X, like the share-to-chats screen Swipe-down no longer dismisses any step. Select People gets the flow's X, and the confirm sheet gets its own X that returns to Select People. --- Flipcash/Core/Screens/Send/GroupSendFlow.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Flipcash/Core/Screens/Send/GroupSendFlow.swift b/Flipcash/Core/Screens/Send/GroupSendFlow.swift index 8d5f6ebe1..e096dda4e 100644 --- a/Flipcash/Core/Screens/Send/GroupSendFlow.swift +++ b/Flipcash/Core/Screens/Send/GroupSendFlow.swift @@ -53,9 +53,12 @@ private struct GroupSendFlowContent: View { switch step { case .selectPeople: GroupSendSelectPeopleScreen(viewModel: viewModel) + .toolbar { closeButton } } } } + // Like the share-to-chats screen, the flow closes only from its X. + .interactiveDismissDisabled() .onChange(of: viewModel.depositMint) { _, mint in guard let mint else { return } viewModel.depositMint = nil @@ -172,7 +175,7 @@ private struct GroupSendSelectPeopleScreen: View { await viewModel.refreshMembers() } .sheet(isPresented: $isConfirming) { - GroupSendConfirmSheet(viewModel: viewModel) + GroupSendConfirmSheet(viewModel: viewModel) { isConfirming = false } } } @@ -207,6 +210,7 @@ private struct GroupSendConfirmSheet: View { @Environment(AppRouter.self) private var router let viewModel: GroupSendViewModel + let onClose: () -> Void @State private var didSucceed = false @State private var isShowingTokenSelection = false @@ -270,6 +274,11 @@ private struct GroupSendConfirmSheet: View { .padding(.top, 30) .padding(.bottom, bottomPadding) } + .overlay(alignment: .topTrailing) { + CloseButton(action: onClose) + .padding(16) + } + .interactiveDismissDisabled() // Hold the success checkmark briefly, then dismiss the whole flow back to the chat. .task(id: didSucceed) { guard didSucceed else { return } From b1396666b4a8922528f44b130c7e6a3bc06111cb Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Sun, 25 Oct 2026 17:47:23 -0400 Subject: [PATCH 2/2] fix(group-send): keep the X on the amount step only Select People closes through its back button, and the confirm half sheet swipes back to Select People, as before. --- Flipcash/Core/Screens/Send/GroupSendFlow.swift | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Flipcash/Core/Screens/Send/GroupSendFlow.swift b/Flipcash/Core/Screens/Send/GroupSendFlow.swift index e096dda4e..0febf33f6 100644 --- a/Flipcash/Core/Screens/Send/GroupSendFlow.swift +++ b/Flipcash/Core/Screens/Send/GroupSendFlow.swift @@ -53,7 +53,6 @@ private struct GroupSendFlowContent: View { switch step { case .selectPeople: GroupSendSelectPeopleScreen(viewModel: viewModel) - .toolbar { closeButton } } } } @@ -175,7 +174,7 @@ private struct GroupSendSelectPeopleScreen: View { await viewModel.refreshMembers() } .sheet(isPresented: $isConfirming) { - GroupSendConfirmSheet(viewModel: viewModel) { isConfirming = false } + GroupSendConfirmSheet(viewModel: viewModel) } } @@ -210,7 +209,6 @@ private struct GroupSendConfirmSheet: View { @Environment(AppRouter.self) private var router let viewModel: GroupSendViewModel - let onClose: () -> Void @State private var didSucceed = false @State private var isShowingTokenSelection = false @@ -274,11 +272,6 @@ private struct GroupSendConfirmSheet: View { .padding(.top, 30) .padding(.bottom, bottomPadding) } - .overlay(alignment: .topTrailing) { - CloseButton(action: onClose) - .padding(16) - } - .interactiveDismissDisabled() // Hold the success checkmark briefly, then dismiss the whole flow back to the chat. .task(id: didSucceed) { guard didSucceed else { return }