Skip to content

fix(currency-creation): pop the creation flow when a launch finishes - #694

Merged
bmc08gt merged 1 commit into
mainfrom
fix/currency-creation-launch-dismiss
Aug 28, 2026
Merged

fix(currency-creation): pop the creation flow when a launch finishes#694
bmc08gt merged 1 commit into
mainfrom
fix/currency-creation-launch-dismiss

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Someone who finishes creating a currency and taps the post-launch reward bill gets stuck in the creation wizard once that bill is claimed. The only control left is the wizard's back chevron; the reporter force-quit the app to get out.

The launch screen is a fullScreenCover presented from the wizard, and it wired dismissParentContainer to router.dismissSheet():

func dismissSheet() {
    guard let dismissing = presentedSheets.popLast() else { return }

The creation flow is pushed onto the Wallet tab's stack (WalletScreen tile → .currencyCreationSummary.currencyCreationWizard), so presentedSheets is empty and the call returns early. Both exits from CurrencyLaunchProcessingScreen — the finished handoff in handleReceiveLaunchedCurrency() and the .failed button — were therefore no-ops, and the screen sets navigationBarBackButtonHidden(true) and interactiveDismissDisabled(true), so nothing else could unwind it either.

The claim itself is not the bug. A received: true bill is deliberately a live SendCashOperation that others can grab; it just exposed the dead exit.

This pops the wizard's owning stack to root instead, matching ConvertFlowDestinationView and the pushed Buy flow. It names the stack rather than relying on popToRoot()'s topmost lookup, because HomeTabView.onDisappear clears activeTabStack while the cover is up. The wizard is only ever pushed, never a sheet root, so there is no host to branch on the way BuyAmountScreen does.

The wiring was correct when it landed in #213.balance was sheet-hosted then, and dismissing the sheet tore down the whole flow. #619 made .balance tab-hosted and this call site was missed.

CurrencyCreationFlowDismissalTests covers both the ordinary case and the one where the cover has already cleared activeTabStack.

The launch screen is a fullScreenCover over the creation wizard, and its
`dismissParentContainer` was wired to `router.dismissSheet()`. The creation
flow is pushed onto the Wallet tab's stack, so there is no sheet to pop and
that call returns early — both exits from CurrencyLaunchProcessingScreen, the
finished handoff and the failure dismissal, did nothing. The screen hides the
back button and disables interactive dismiss, so a user whose launch bill was
claimed by someone else was left in the wizard with only its back chevron and
force-quit the app.

Pop the wizard's owning stack to root instead, matching the convert flow. The
stack is named rather than resolved through `popToRoot()`'s topmost lookup,
since HomeTabView clears `activeTabStack` while the cover is up.

The wiring was correct when it landed in #213, where `.balance` was sheet-hosted
and dismissing the sheet tore down the whole flow; #619 made `.balance`
tab-hosted and this call site was missed.
@bmc08gt bmc08gt self-assigned this Aug 28, 2026
@bmc08gt
bmc08gt merged commit 5784f2d into main Aug 28, 2026
@bmc08gt
bmc08gt deleted the fix/currency-creation-launch-dismiss branch August 28, 2026 21:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant