refactor(runtime): extract first-run onboarding into useOnboarding (#1237)#1279
Merged
Conversation
…1237) Item 4 of the app.ts decomposition. Bundles the first-launch overlay's show / dismiss / persistence into a new `useOnboarding` hook: - owns `showOnboarding`, seeded verbatim from `!hasSeenOnboarding()`; - returns `dismissOnboarding`, a stable `useCallback` that clears the overlay and writes the seen-marker (`setShowOnboarding(false)` then `markOnboardingSeen()`, same order as before). `app.ts` no longer holds the `useState` or imports the onboarding persistence helpers; it renders the overlay off `showOnboarding` and threads `dismissOnboarding` into `useInputHandler`, which now takes that one callback instead of `setShowOnboarding` + `markOnboardingSeen` and calls it on the first keystroke. Behavior is unchanged. Adds tests for the seed (first launch vs returning) and the dismiss (clears + persists).
This was referenced Jun 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Item 4 —
app.tsdecomposition (#1237)Bundles the first-launch onboarding overlay's show / dismiss / persistence into a new
useOnboardinghook.What moved
showOnboarding— theuseState, seeded verbatim from!hasSeenOnboarding().dismissOnboarding— a stableuseCallbackthat clears the overlay and writes the seen-marker:setShowOnboarding(false)thenmarkOnboardingSeen(), same order as the old inline code.Ripple into
useInputHandlerThe handler previously received
setShowOnboarding+markOnboardingSeenand called both inline on the first keystroke. It now takes the singledismissOnboardingcallback and calls it — same two operations, same order, behavior unchanged. This also removes the onboarding-persistence imports fromapp.ts.Changes
hooks/useOnboarding.ts.app.ts:useState→useOnboarding(React); drophasSeenOnboarding/markOnboardingSeenimport; threaddismissOnboardinginto the input handler.useInputHandler.ts: swap the two onboarding deps fordismissOnboarding; collapse the two inline calls.hooks/useOnboarding.test.ts— seed (first launch vs returning) + dismiss (clears + persists).Validation
jest(workstation): 111 suites / 1874 tests pass, 68 snapshots no diffstsc --noEmit: clean ·eslint: 0 errors ·rollup -c: buildsdist/