Skip to content

iOS: show compact workspace disclosure affordance#6060

Open
azooz2003-bit wants to merge 1 commit into
mainfrom
task-ios-workspace-navigationlink-row
Open

iOS: show compact workspace disclosure affordance#6060
azooz2003-bit wants to merge 1 commit into
mainfrom
task-ios-workspace-navigationlink-row

Conversation

@azooz2003-bit

@azooz2003-bit azooz2003-bit commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • keep the manual compact workspace-row tap path after simulator testing showed NavigationLink(value:) still interferes with row swipe/context delete confirmation in List
  • add an explicit trailing compact-stack disclosure chevron while preserving PR 6022 row actions
  • document the SwiftUI List interaction constraint next to the row content

Testing

  • git diff --check
  • xcodebuild build -workspace ios/cmux.xcworkspace -scheme cmux-ios -configuration Debug -destination 'platform=iOS Simulator,name=iPhone 17' -derivedDataPath /tmp/cmux-ios-wlnk-build PRODUCT_BUNDLE_IDENTIFIER=dev.cmux.ios.wlnkbuild PRODUCT_DISPLAY_NAME='cmux DEV wlnk' CMUX_DEV_TAG=wlnk CMUX_GIT_SHA=$(git rev-parse --short HEAD)+ EXCLUDED_SOURCE_FILE_NAMES=Info.plist CODE_SIGNING_ALLOWED=NO\n- python3 scripts/swift_file_length_budget.py --budget .github/swift-file-length-budget.tsv\n\n## Issues\n- Related: iOS: add workspace row actions #6022

View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Summary by cubic

Shows a compact disclosure chevron on workspace rows in push navigation, while keeping manual tap handling to avoid SwiftUI List swipe/delete conflicts. Improves clarity in compact stacks without breaking row actions.

  • New Features

    • Adds a trailing chevron in push (.push) navigation to indicate disclosure.
  • Bug Fixes

    • Replaces NavigationLink(value:) with a manual tap to keep swipe/context delete confirmation working in List (documented inline).

Written for commit 0e4257e. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

Release Notes

  • UI Improvements
    • Workspace navigation rows now display visual directional indicators for push-style navigation interactions, providing clearer visual cues and helping users better understand available navigation options and their behavior throughout the application.

@vercel

vercel Bot commented Jun 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jun 13, 2026 6:43pm
cmux-staging Building Building Preview, Comment Jun 13, 2026 6:43pm

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: caca5bb9-6e83-4722-b0e2-1a3da5b7624c

📥 Commits

Reviewing files that changed from the base of the PR and between 0b82dfe and 0e4257e.

📒 Files selected for processing (1)
  • Packages/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceNavigationRow.swift

📝 Walkthrough

Walkthrough

WorkspaceNavigationRow refactors its body implementation to use a new private rowContent computed view. The refactor extracts WorkspaceRow into an HStack that conditionally renders a trailing chevron icon when the navigation style is .push, with layout priority applied to the row.

Changes

Workspace navigation row chevron rendering

Layer / File(s) Summary
Row content extraction and chevron rendering
Packages/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceNavigationRow.swift
body delegates to a new private var rowContent that wraps WorkspaceRow in an HStack. The new view conditionally appends a forward chevron icon when navigationStyle == .push and applies layout priority to the row content.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 A navigation row finds its style,
With chevrons dancing mile by mile,
Push it gently, watch it go,
Private views steal the show! ✨

🚥 Pre-merge checks | ✅ 20 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The pull request description covers the main changes and testing performed, but is missing key sections from the template: Demo Video (no UI video provided) and the Checklist (empty checkboxes not completed). The Summary and Testing sections are present but incomplete against template requirements. Complete the Checklist section by checking relevant items (testing, tests, docs updates, bot reviews, comment resolution). Add a demo video URL for this UI change, or explain why none is available.
✅ Passed checks (20 passed)
Check name Status Explanation
Title check ✅ Passed The title 'iOS: show compact workspace disclosure affordance' directly describes the main change: adding a trailing chevron icon for workspace rows in push navigation. It is concise, specific, and clearly indicates the primary purpose of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PR #6060 only refactors WorkspaceNavigationRow UI (new rowContent HStack + conditional chevron); no async/service protocols, Sendable ref types, or background UI-store access introduced.
Cmux Swift Blocking Runtime ✅ Passed PR #6060 diff only refactors WorkspaceNavigationRow body into rowContent and adds a conditional trailing chevron; inspected WorkspaceNavigationRow.swift shows no semaphore/sleep/poll/sync/main-queu...
Cmux Expensive Synchronous Load ✅ Passed PR #6060 only updates WorkspaceNavigationRow.swift to route body through rowContent and add a conditional chevron; diff contains no RestorableAgentSessionIndex.load/sysctl/SharedLiveAgentIndex.shar...
Cmux Cache Substitution Correctness ✅ Passed Only UI tweak in WorkspaceNavigationRow.swift (rowContent + conditional chevron). No cache substitution in persistence/history/undo/snapshot paths per cache-substitution-correctness.md.
Cmux No Hacky Sleeps ✅ Passed PR #6060 changes only Packages/CmuxMobileShellUI/.../WorkspaceNavigationRow.swift (+32/−7); no TypeScript/JS/shell/build/runtime script diffs, so runtime-no-hacky-sleeps is not triggered.
Cmux Algorithmic Complexity ✅ Passed PR 6060 only refactors WorkspaceNavigationRow UI into a rowContent HStack with a conditional chevron; no loops, full scans, sorting, or filtering over scalable collections added.
Cmux Swift Concurrency ✅ Passed WorkspaceNavigationRow.swift changes contain no legacy async patterns: no DispatchQueue/background work, Combine app state, completion handlers, or Task {}/detached tasks in the added/updated code.
Cmux Swift @Concurrent ✅ Passed WorkspaceNavigationRow.swift only defines synchronous SwiftUI view code (no async/nonisolated async) and contains no @concurrent usage; rule file concerns incorrect concurrent async work.
Cmux Swift File And Package Boundaries ✅ Passed WorkspaceNavigationRow.swift (163 lines) is SwiftUI UI-only (rowContent/HStack + chevron) with no parsing/network/persistence/protocol logic; not an oversized-file/package-boundary violation.
Cmux Swift Logging ✅ Passed PR diff only refactors WorkspaceNavigationRow to a rowContent HStack and adds a chevron image; no print/debugPrint/dump/NSLog or Logger additions found in changed Swift file.
Cmux User-Facing Error Privacy ✅ Passed Inspected WorkspaceNavigationRow.swift: no vendor/provider/credentials/upstream error text added; only generic workspace action labels and delete-confirm L10n, plus developer-only SwiftUI List comm...
Cmux Full Internationalization ✅ Passed New WorkspaceNavigationRow.swift uses L10n.string/String(localized:defaultValue:) for all user-facing labels/dialog text; no bare Text("…") literals or web/i18n updates, and referenced keys exist i...
Cmux Swiftui State Layout ✅ Passed swiftui-state-layout rules flag ObservableObject/@published, GeometryReader layout measurement, lazy/list row store refs, and render-time state writes. WorkspaceNavigationRow.swift adds rowContent...
Cmux Architecture Rethink ✅ Passed WorkspaceNavigationRow.swift refactors to a private rowContent view and adds a conditional chevron; no timing fixes (sleep/asyncAfter), locks, polling, observers, or side-channel state were introdu...
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed WorkspaceNavigationRow.swift diff only adds a rowContent HStack + conditional chevron; it introduces no NSWindow/NSPanel/SwiftUI Window(WindowGroup) code or cmux.* close-shortcut identifier registr...
Cmux Source Artifacts ✅ Passed PR #6060 changes only Packages/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceNavigationRow.swift (+25/-7); no DerivedData/tmp/artifact dirs or generated logs added per source-control-artifac...

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task-ios-workspace-navigationlink-row

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps

greptile-apps Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds an explicit disclosure chevron to workspace rows in the compact (push) navigation style, working around a SwiftUI List constraint where NavigationLink(value:) interferes with swipe-action and context-delete confirmation presentation.

  • WorkspaceRow is extracted into a rowContent computed property wrapped in a new HStack; a trailing chevron.forward image is conditionally appended only when navigationStyle == .push.
  • The chevron is marked accessibilityHidden(true), so VoiceOver's combined accessibility element (already using .isButton) is unaffected; existing swipe and context-menu row actions are unchanged.

Confidence Score: 5/5

The change is a small, self-contained UI addition: one new computed view property, a conditional chevron image, and a well-motivated comment explaining the SwiftUI List constraint. No state, no async code, no new strings.

The extraction of rowContent into an HStack is straightforward. The chevron is correctly hidden from accessibility, layout priority is set to prevent the icon from compressing WorkspaceRow, and all existing swipe/context-menu actions are untouched. No correctness issues were identified.

No files require special attention.

Important Files Changed

Filename Overview
Packages/CmuxMobileShellUI/Sources/CmuxMobileShellUI/WorkspaceNavigationRow.swift Extracts WorkspaceRow into a rowContent computed property wrapped in an HStack, adding a trailing chevron.forward icon when navigationStyle == .push. The chevron is correctly marked accessibilityHidden(true) and the existing swipe/context-menu row actions are preserved.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[WorkspaceNavigationRow.body] --> B[rowContent HStack]
    B --> C[WorkspaceRow\n.layoutPriority 1]
    B --> D{navigationStyle\n== .push?}
    D -- yes --> E[chevron.forward\naccessibilityHidden]
    D -- no --> F[nothing]
    A --> G[.onTapGesture\nselectWorkspace]
    A --> H[.swipeActions\nleading / trailing]
    A --> I[.contextMenu]
    A --> J[.accessibilityElement\nchildren combine]
Loading

Reviews (1): Last reviewed commit: "Show compact workspace row disclosure" | Re-trigger Greptile

@azooz2003-bit

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

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