Skip to content

Goals page mobile: add All/Mine quick-scope toggle in the title row#1995

Merged
psdjungpulzze merged 1 commit into
mainfrom
goal/goals-page-mobile-add-all-mine-quick-scope-toggle-in-the-tit
Jul 12, 2026
Merged

Goals page mobile: add All/Mine quick-scope toggle in the title row#1995
psdjungpulzze merged 1 commit into
mainfrom
goal/goals-page-mobile-add-all-mine-quick-scope-toggle-in-the-tit

Conversation

@interactor-product-manager

@interactor-product-manager interactor-product-manager Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Integration PR for this goal — its tasks commit onto this branch (one PR per goal). Opened automatically by the engine on first push; left as a draft until the goal completes.

Delivery summary

What was built for this goal, assembled for review at delivery time.

Goals page mobile: add All/Mine quick-scope toggle in the title row

Peter wants a quick "All | Mine" scope toggle added to the Goals page (engine-goals-client.tsx), placed in the SAME LINE as the "Goals" page title (the PageBar title row), below lg -- mirroring the pattern Approvals already ships (approvals-client.tsx's "All | Mine" pill row, from G#594/PR#1984), though Approvals renders its All/Mine as a row just below the title rather than inline with it -- confirm the exact placement (truly inline with the "Goals" text vs. immediately below it in the title bar's rightSlot) during scoping/planning, matching whichever reads cleanest at 390px. Today the Goals page's owner-scoping is the fuller "Owner" filter (all / mine / a specific person) plus a separate "Hiding unassigned" toggle, both tucked into the consolidated Controls dropdown per G#592/G#600 (chips now fold into the dropdown, not a separate row). Peter wants a FAST, always-visible All/Mine binary shortcut in the title row in addition to that fuller filter -- clarify during scoping whether this new toggle: (a) is purely a quick-access alias that sets the existing owner filter to "all" or "mine" (current user) directly, leaving the fuller Owner dropdown control (which also supports picking a specific other person) untouched inside the Controls menu, or (b) should replace the Owner facet inside the dropdown entirely. Given Approvals kept its fuller Inbox/Sent/All exclusively as "All/Mine" (no third-party-assignee option), and Goals' Owner filter is richer (can filter to any specific teammate, not just "me"), (a) -- an additional fast toggle, not a replacement -- is the more likely fit; confirm with Peter rather than assuming. Scope: below-lg only; desktop (lg+) must stay byte-identical, consistent with every other goal in this mobile-polish round.

Branch: goal/goals-page-mobile-add-all-mine-quick-scope-toggle-in-the-tit · PR: #1995

What shipped

  • Plan: Goals page mobile: add All/Mine quick-scope toggle in the title row (Planning)

Plan of record

Goals page mobile: add an ADDITIVE below-lg "All | Mine" owner quick-toggle as a slim segmented-pill row just below the "Goals" title. DECOMPOSE outcome: one implementation task spawned (#1983). Desktop (lg+) stays byte-identical.

Acceptance criteria

  • pill-in-rightslot-below-lg: A compact segmented 'All | Mine' pill renders in the Goals PageBar rightSlot (exposed via the page-bar-right-slot testid in tests), inside the pageBarControls memo, positioned BEFORE the existing lg:hidden GoalsControlsMenu wrapper so it sits left of the Controls menu and right of the 'Goals' heading.
  • lg-hidden-desktop-byte-identical: The pill is wrapped in lg:hidden and never renders at lg+; the desktop (>=1024px) rightSlot continues to render only addGoalButton, leaving the desktop title row byte-identical to before this change.
  • all-segment-wiring: Clicking the 'All' segment calls setFilter('owner', OWNER_ALL) (OWNER_ALL imported from goals-view.ts, value 'all'), and the 'All' segment renders as active exactly when filters.owner === 'all'.
  • mine-segment-wiring: Clicking the 'Mine' segment calls setFilter('owner', currentUserId), and the 'Mine' segment renders as active exactly when filters.owner === currentUserId.
  • neither-active-for-third-party: When filters.owner is a specific OTHER teammate id or OWNER_UNASSIGNED, NEITHER segment renders as active (the pill does not misrepresent the current scope).
  • mine-gated-by-can-filter: The 'Mine' segment is only rendered/offered when canFilterByMyGoals(currentUserId) is true (imported from goals-view.ts); when currentUserId is the 'all' sentinel or empty, 'Mine' is not offered.
  • include-unassigned-and-owner-facet-untouched: The pill is a purely additive alias: it does not modify filters.includeUnassigned, and the Owner facet inside GoalsControlsMenu / FiltersPopover is left in place unchanged (not removed or replaced).
  • design-tokens-and-touch-target: The pill is a single rounded-full container with two segments, each >=44px height per mobile-design-principles; the active segment uses #4CD964 and text uses #1C1C1E / #8E8E93, matching surrounding idiom.
  • no-overflow-mobile: At 390px and 834px viewport widths the rightSlot (pill + Controls icon-pill + 44px Add-Goal button) does not cause horizontal overflow; the flex-1 min-w-0 'Goals' title shrinks to accommodate.
  • tests-extended: engine-goals-client.test.tsx is extended (rendering inside PageBarProvider, rightSlot via page-bar-right-slot testid) to cover: pill present in rightSlot; clicking All sets owner to 'all'; clicking Mine sets owner === currentUserId; active-segment reflection including the 'neither' case when a third-party owner is selected; and that 'Mine' is not offered when currentUserId is the 'all'/empty sentinel.
  • typecheck-and-tests-green: npm run typecheck passes and the goals test file (engine-goals-client.test.tsx) passes.
  • agent-config-note: The PR description includes a one-line note that no PM Agent config update is needed because this is a pure UI alias over an existing owner filter (no agent-visible tool or data change).

Review

0 of 3 review finding(s) resolved.

Commits

0142b25b91a41febe6b2315b0396f1f7c3856780…d0adb8ebd08b7f2f5b4c1d077721dae99ba621b0 in InteractorOSS/product-manager

Adds a compact, lg:hidden segmented "All | Mine" pill to the Goals
PageBar right slot, left of the Controls trigger — a one-tap alias over
the existing owner facet (additive; the Owner facet in the Controls menu
/ FiltersPopover and the includeUnassigned toggle are untouched).

- All -> setFilter('owner', OWNER_ALL); Mine -> setFilter('owner', currentUserId).
- Neither segment is active when a third-party teammate / Unassigned owns
  the facet, so the pill never misreports scope.
- Mine is only offered when canFilterByMyGoals(currentUserId) is true.

Desktop (lg+) is byte-identical — the pill is lg:hidden and the desktop
rightSlot still renders only addGoalButton.

No agent-visible tool/data change (pure UI alias over an existing filter).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@psdjungpulzze psdjungpulzze marked this pull request as ready for review July 12, 2026 06:13
@psdjungpulzze psdjungpulzze merged commit b600d97 into main Jul 12, 2026
11 checks passed
@psdjungpulzze psdjungpulzze deleted the goal/goals-page-mobile-add-all-mine-quick-scope-toggle-in-the-tit branch July 14, 2026 05:34
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