feat(ui): GitHub Issues list pilot on the shared design system (U5 B1)#435
Conversation
Third B1 screen, ported from desktop-github-issues.html: - libs/ui: new IssueList screen — search + filter-chip toolbar (active chip count turns blue per the mockup), two-column body with issue rows (22px circular state pill open/closed/draft, mono repo slug, label pills in six semantic tones, assignee stack, comment count) beside an optional right meta rail on the shared UiMetaSection card family; loading/error/empty states; rail drops below at 1180px. New shared types: UiIssue/UiIssueState/UiIssueLabel/UiIssueLabelTone/ UiIssueAssignee. - Electron: pure github-issues-ui mappers (label-name → tone inference, GitHubIssue → row shape reusing the PR pilot's initials/ relative-age helpers, client-side filtering; 5 tests) + GitHubIssuesPilotView over the existing getGitHubIssues IPC paired with checkGitHubConnection for a reachable error state; the state chips (Open/Closed/All) drive the server-side state param. Mounted as "GitHub Issues (new UI)" beside the legacy investigation view. - i18n: github:issuesPilot.* keys (en+fr), navigation.githubIssuesNext. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Search now matches the issue author, which both locales' search label and the helper's doc comment already promised — UiIssue gains an author field the adapter fills and filterIssues checks. - Meta rail no longer renders GitHubSyncStatus.issueCount: the connection handler derives it from a per_page=1 probe, so it is always 0 or 1. Report the loaded row count and the last sync time instead (new meta.loaded / meta.lastSynced keys, en+fr). 6 mapper tests green; tsc clean in libs/ui and the Electron app. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds a reusable GitHub Issues list UI, shared issue-row types, GitHub data mapping and filtering helpers, localized labels, Storybook states, and application/sidebar wiring for the new pilot view. ChangesGitHub Issues pilot
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant Sidebar
participant App
participant GitHubIssuesPilotView
participant ElectronIPC
participant IssueList
Sidebar->>App: select github-issues-next
App->>GitHubIssuesPilotView: mount with projectId
GitHubIssuesPilotView->>ElectronIPC: check GitHub connection and fetch issues
ElectronIPC-->>GitHubIssuesPilotView: return sync data and issues
GitHubIssuesPilotView->>IssueList: pass mapped issues, filters, and localized labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ 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 |
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/frontend/src/renderer/lib/github-issues-ui.ts`:
- Around line 66-77: Refactor the issue predicate in the filtering logic to
evaluate searchable fields with a helper and short-circuiting logical OR instead
of constructing the combined array, mapped label/assignee arrays, and
intermediate filter. Preserve the existing searchable values, null handling, and
case-insensitive needle matching while allowing later fields to be skipped after
a match.
🪄 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: ASSERTIVE
Plan: Pro
Run ID: 06be36e6-a1df-43d7-9e1d-952f878d8070
📒 Files selected for processing (14)
apps/frontend/src/renderer/App.tsxapps/frontend/src/renderer/__tests__/github-issues-ui.test.tsapps/frontend/src/renderer/components/GitHubIssuesPilotView.tsxapps/frontend/src/renderer/components/Sidebar.tsxapps/frontend/src/renderer/lib/github-issues-ui.tsapps/frontend/src/shared/i18n/locales/en/github.jsonapps/frontend/src/shared/i18n/locales/en/navigation.jsonapps/frontend/src/shared/i18n/locales/fr/github.jsonapps/frontend/src/shared/i18n/locales/fr/navigation.jsonlibs/ui/src/client/types.tslibs/ui/src/index.tslibs/ui/src/screens/IssueList.csslibs/ui/src/screens/IssueList.stories.tsxlibs/ui/src/screens/IssueList.tsx
Evaluate searchable fields through a small matcher with logical OR instead of building intermediate arrays per issue per keystroke — same fields and null handling, no allocations, stops at first match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Optional-chain the search matcher and use String.raw for the story title carrying an escaped backslash. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|



Summary
Third screen of the B1 "Code & review" batch, ported from
desktop-github-issues.html.libs/ui (shared design system)
UiMetaSectioncard family; loading/error/empty states; the rail drops below the list at 1180px.UiIssue/UiIssueState/UiIssueLabel/UiIssueLabelTone/UiIssueAssignee.PullRequestList: the summary stat row, CI checks, branch chips and per-row badge/time column — the Issues mockup has none of them.Electron
github-issues-uimappers: label-name → semantic tone inference,GitHubIssue→ row shape (reusing the PR pilot'sinitialsOf/relativeAge), client-side filtering — 6 tests.GitHubIssuesPilotViewover the existinggetGitHubIssuesIPC paired withcheckGitHubConnection(same reachable-error pattern as the PRs pilot); the Open/Closed/All chips drive the server-sidestateparam. Mounted as "GitHub Issues (new UI)" beside the legacy investigation view, which stays untouched.i18n
github:issuesPilot.*(en+fr),navigation:items.githubIssuesNext.Adversarial review
The verify stage hit the subagent session limit, so both findings were checked by hand against the code and fixed:
UiIssue.authoradded, filled by the adapter, matched byfilterIssues, pinned by a test.GitHubSyncStatus.issueCount, which the connection handler derives from aper_page=1probe — always 0 or 1 → replaced with the loaded row count plus last-sync time (meta.loaded/meta.lastSynced, en+fr).I'll re-run the full find→verify workflow once the limit resets; anything it surfaces lands as a follow-up commit on this PR.
Verification
libs/ui+ Electron tsc clean; Storybook rebuilt and the OpenIssues story verified against the mockup (state pills, label tones, assignee stacks, comment counts, meta rail).Next in B1
Patterns and Context screens on the same playbook.
🤖 Generated with Claude Code
Summary by CodeRabbit