🌐 US-Proxy
class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
Skip to content

feat(site/src/pages/TemplateBuilder): scroll to module when clicking sidebar row - #27351

Merged
aqandrew merged 9 commits into
mainfrom
feat/sidebar-module-scroll
Aug 6, 2026
Merged

feat(site/src/pages/TemplateBuilder): scroll to module when clicking sidebar row#27351
aqandrew merged 9 commits into
mainfrom
feat/sidebar-module-scroll

Conversation

@aqandrew

Copy link
Copy Markdown
Contributor

What

Clicking a selected module in the right-hand SelectionSummary sidebar now jumps to the module settings step and scrolls that module's card into view.

Addresses DEVEX-587. This is an isolated slice of #27077 (which bundles several unrelated changes); only the "click a module to scroll to it" behavior is included here.

Changes

  • SelectionSummary: gains an optional onNavigateModule prop. When provided, each selected module row renders as an accessible <button> (hover + focus-ring) labeled Configure <name>; otherwise rows stay non-interactive.
  • ModuleSettingsStep: each module card wrapper gets a stable id={module-config-<id>} scroll anchor plus scroll-mt-24 so the sticky top nav does not cover the title.
  • TemplateBuilderPageView: adds navigateToModule, which switches to the module settings step and scrolls the target module into view once it renders. If the module settings step is skipped (no configurable variables), the click is a no-op.
  • SelectionSummary.stories: adds a NavigateModuleClick interaction story and updates WithLongNameModule to the new button semantics.

Explicitly out of scope

The rest of #27077 is not included: gallery height/card clamp, sensitive-var banner relocation, trash-icon removal wiring, the scroll-past required-field highlight subsystem, and the broader navigable-sidebar work (step labels, base-row navigation, back-stack semantics).

Testing

  • pnpm check (biome) clean
  • pnpm lint:types (tsc) clean
  • pnpm vitest run --project=unit src/pages/TemplateBuilder — 46 pass
  • pnpm vitest run --project=storybook src/pages/TemplateBuilder — 34 pass (incl. new NavigateModuleClick)
Implementation plan / decision log

Goal

Open a new PR containing only the changes that satisfy DEVEX-587: clicking a selected module in the right-hand SelectionSummary sidebar should jump to the module settings step and scroll that module's card into view.

Base has moved since #27077

PR #27077 was cut against an older main. Today's main was refactored:

  • Steps are URL-driven; steps.ts already provides StepId, per-step group (1/2/3), and nearestVisible().
  • TemplateBuilderPageView already has navigateToStep(index: number) and a useEffect that resets window scroll on every currentStep.id change.
  • The sidebar no longer has a deselect ("X") button. The PR's entanglement between "make row a nav button" and "move deselect to a trash icon" therefore does not exist on current main, so module navigation can be added without removing behavior and without pulling in the trash-icon item.

So the isolated diff was written against current main, not reused verbatim from the PR. It is smaller than the PR's own hunks and does not include maxReachedStep, step-label navigation, or base-row navigation.

Decisions

  • Scope for this PR: module-row navigation only.
  • Skipped-settings fallback: no-op. When no selected module exposes configurable variables, the module-settings step is skipped and clicking a module row does nothing (there is no card to scroll to).

Scroll timing

navigateToStep triggers a window scroll reset via an existing effect keyed on currentStep.id. To cooperate, navigateToModule stores the target module id in a ref and a follow-up effect (declared after the scroll-reset effect, so it runs second) calls scrollIntoView inside requestAnimationFrame once module-settings has rendered. When already on module-settings, it scrolls immediately.

Follow-up (deferred): full navigable sidebar

Not part of this PR, documented for later. The remainder of #27077's item #2, rebased onto current main:

  • onNavigateStep?: (stepId: StepId) => void on SelectionSummary.
  • Clickable step labels: Base Template -> base-infra, Modules -> module-select, Customizations -> customizations.
  • Clickable selected base-template row -> base-parameters (fall back to base-infra when that step is skipped for the chosen base).
  • Back-stack semantics via a maxReachedStep prop so steps at or below the furthest-reached group stay complete and clickable even after navigating backward, while strictly-higher groups render as inert upcoming.
  • StepIndicator and BaseTemplateSelection render as <button> when a navigation handler is supplied, else stay inert.
  • Stories: NavigationClicks, BackwardNavigation, and UpcomingStepsInert.

Coder Agents generated, on behalf of @aqandrew.

…sidebar row

Make each selected module row in the SelectionSummary sidebar a jump
target. Clicking a module switches to the module settings step and
scrolls that module's card into view via a module-config-<id> anchor.
When the module settings step is skipped (no configurable variables),
the click is a no-op.
@aqandrew
aqandrew marked this pull request as draft July 20, 2026 20:14
@linear-code

linear-code Bot commented Jul 20, 2026

Copy link
Copy Markdown

DEVEX-587

@aqandrew
aqandrew marked this pull request as ready for review July 20, 2026 21:32
@github-actions github-actions Bot added the stale This issue is like stale bread. label Aug 5, 2026
Comment thread site/src/pages/TemplateBuilder/TemplateBuilderPageView.tsx Outdated
…dule

Replace the module-config DOM id lookup with a ref registry. The parent
owns a useRef(new Map()) and passes a registerModuleRef callback down to
ModuleSettingsStep, which attaches it via a callback ref on each module
wrapper. Addresses PR review feedback.
@aqandrew
aqandrew requested a review from jeremyruppel August 5, 2026 21:25
@github-actions github-actions Bot removed the stale This issue is like stale bread. label Aug 6, 2026
@aqandrew
aqandrew merged commit baed145 into main Aug 6, 2026
26 checks passed
@aqandrew
aqandrew deleted the feat/sidebar-module-scroll branch August 6, 2026 15:26
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants