Ship Linear pane loading fixes and new Files workbench#521
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
📝 WalkthroughWalkthroughThe PR adds a browser view occlusion event system to manage native browser visibility when Linear overlay modals open, and significantly enhances the Linear issue browser with automatic infinite scroll pagination, rich markdown rendering of issue descriptions, and a refactored properties display. ChangesBrowser View Occlusion Event System
LinearIssueBrowser Infinite Scroll and Markdown Rendering
🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
|
@copilot review but do not make fixes |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/desktop/src/renderer/components/app/LinearIssueBrowser.tsx`:
- Around line 437-448: The anchor renderer currently calls
openUrlInAdeBrowser(href) without checking href; update the onClick handler in
the anchor render function to first preventDefault() and then only call
openUrlInAdeBrowser if href is a non-empty string (e.g., typeof href ===
"string" && href.trim() !== ""), so malformed or undefined href values are
ignored and no undefined is passed into openUrlInAdeBrowser; keep the same
className and children usage and only change the onClick guard logic.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 2e6be4e4-f332-4890-a2da-45076225afc1
📒 Files selected for processing (6)
apps/desktop/src/renderer/components/app/LinearIssueBrowser.tsxapps/desktop/src/renderer/components/app/LinearPaneModal.tsxapps/desktop/src/renderer/components/app/LinearQuickViewButton.tsxapps/desktop/src/renderer/components/chat/ChatBuiltInBrowserPanel.test.tsxapps/desktop/src/renderer/components/chat/ChatBuiltInBrowserPanel.tsxapps/desktop/src/renderer/lib/workSidebarBrowserResize.ts
|
@copilot review but do not make fixes |
dbb20b3 to
e5a5a25
Compare
|
@copilot review but do not make fixes |
Summary
Describe the change.
What Changed
Key files and behaviors.
Validation
How you tested.
Risks
Anything to watch.
Summary by CodeRabbit
New Features
Improvements
Tests
Greptile Summary
This PR ships two changes: Linear pane UX improvements (infinite-scroll paging, richer markdown rendering, a refactored issue properties panel, and browser-view occlusion fixes for when modals are open) and the permanent promotion of the v2
FilesWorkbenchby removing thefilesWorkbenchFlagfeature gate and deleting the legacyFilesPage.IntersectionObserver-based auto-paging with anAUTO_LOAD_MAX_ISSUES=500soft cap, bumps page size to 100, introduces aLinearMarkdowncomponent reusing the chat markdown stack, and refactorsIssueDetailsinto a cleanerIssuePropertiestable layout. AnappendingMoreflag separates the append spinner from the full-reload spinner.ADE_BROWSER_VIEW_OCCLUSION_START/ENDevents so the native browser view is hidden whenever any Linear overlay (quick-view or full modal) is open, and only restored once all overlays are dismissed. Covered by a new test inChatBuiltInBrowserPanel.test.tsx.localStoragefeature flag, deletesFilesPage.tsx(~3200 lines) and its test file, and makesFilesTabunconditionally renderFilesWorkbench.Confidence Score: 5/5
Safe to merge — all changed logic is additive, well-guarded, and covered by tests.
The infinite-scroll implementation correctly uses a ref-refresh pattern to avoid stale closures in the IntersectionObserver callback, and the appendingMore flag is kept in sync with the append-only in-flight state. The reference-counted occlusion suppression handles concurrent modals without leaks. The FilesPage deletion is a clean GA promotion with no remaining references in source code.
No files require special attention.
Important Files Changed
Sequence Diagram
sequenceDiagram participant User participant LinearIssueBrowser participant IntersectionObserver participant searchIssues participant LinearPaneModal/QuickViewButton participant ChatBuiltInBrowserPanel User->>LinearIssueBrowser: scrolls issue list IntersectionObserver->>LinearIssueBrowser: sentinel intersects (rootMargin 400px) LinearIssueBrowser->>LinearIssueBrowser: autoLoadMoreRef.current() alt "issues < AUTO_LOAD_MAX_ISSUES (500) and hasNextPage" LinearIssueBrowser->>searchIssues: "searchIssues(append=true)" searchIssues->>LinearIssueBrowser: setAppendingMore(true) searchIssues-->>LinearIssueBrowser: resolve, mergeIssuePages, setAppendingMore(false) else "issues >= 500" LinearIssueBrowser->>User: shows Load more button end User->>LinearPaneModal/QuickViewButton: opens modal LinearPaneModal/QuickViewButton->>ChatBuiltInBrowserPanel: ADE_BROWSER_VIEW_OCCLUSION_START ChatBuiltInBrowserPanel->>ChatBuiltInBrowserPanel: "suppressionCount++, setBounds(visible=false)" User->>LinearPaneModal/QuickViewButton: closes modal LinearPaneModal/QuickViewButton->>ChatBuiltInBrowserPanel: ADE_BROWSER_VIEW_OCCLUSION_END ChatBuiltInBrowserPanel->>ChatBuiltInBrowserPanel: "suppressionCount--, if 0 setBounds(visible=true)"Reviews (3): Last reviewed commit: "ship: iteration 1 - remove legacy Files ..." | Re-trigger Greptile