fix(web): prevent Edit Tracker Name dialog overflow#797
Conversation
- Use fixed height ScrollArea (h-[300px]) for vertical scrolling - Switch domain rows from flexbox to CSS grid for proper width constraint - Long domain names now truncate with ellipsis and show full URL on hover Fixes #772
WalkthroughThe Dashboard component's tracker customization interface has been refactored to use fixed-height scrollable containers and updated grid layouts for improved handling of long domain lists, replacing previous ScrollArea wrappers and adjusting domain row rendering logic. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
Possibly related PRs
Suggested labels
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
web/src/pages/Dashboard.tsx (1)
1976-2025: Edit Tracker Name dialog ScrollArea + grid layout look correct; consider tightening truncation behaviorThe fixed-height
ScrollAreaplusmin-h-0 flex-1/overflow-hiddenwrapper should solve the vertical overflow and keep the footer controls accessible even with many domains. The grid layout (grid-cols-[auto_1fr_auto_auto]) and inclusion/primary logic also look consistent.One small layout tweak to make truncation more reliable for very long domains in a grid context:
- Add
min-w-0to the text span sotruncatecan actually shrink within the 1fr column in all browsers:- <span className={`truncate${isPrimary ? " font-medium" : ""}`} title={domain}>{domain}</span> + <span + className={`truncate min-w-0${isPrimary ? " font-medium" : ""}`} + title={domain} + > + {domain} + </span>This helps avoid horizontal overflow when domains are extremely long or the dialog is narrow.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
web/src/pages/Dashboard.tsx(4 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: s0up4200
Repo: autobrr/qui PR: 637
File: web/src/pages/Dashboard.tsx:805-831
Timestamp: 2025-11-25T11:39:54.748Z
Learning: In web/src/pages/Dashboard.tsx, the TrackerIconImage component intentionally receives displayDomain (incognito-mapped name) instead of the real domain in incognito mode. This causes icon lookups to fail and show only fallback letters, which is desired behavior for privacy - hiding both tracker names and icons when incognito mode is enabled.
📚 Learning: 2025-11-25T11:39:54.748Z
Learnt from: s0up4200
Repo: autobrr/qui PR: 637
File: web/src/pages/Dashboard.tsx:805-831
Timestamp: 2025-11-25T11:39:54.748Z
Learning: In web/src/pages/Dashboard.tsx, the TrackerIconImage component intentionally receives displayDomain (incognito-mapped name) instead of the real domain in incognito mode. This causes icon lookups to fail and show only fallback letters, which is desired behavior for privacy - hiding both tracker names and icons when incognito mode is enabled.
Applied to files:
web/src/pages/Dashboard.tsx
🧬 Code graph analysis (1)
web/src/pages/Dashboard.tsx (3)
web/src/components/ui/label.tsx (1)
Label(29-29)web/src/components/ui/scroll-area.tsx (1)
ScrollArea(61-61)web/src/components/ui/badge.tsx (1)
Badge(51-51)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Run tests
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.10.0` -> `v1.11.0` | --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.11.0`](https://github.com/autobrr/qui/releases/tag/v1.11.0) [Compare Source](autobrr/qui@v1.10.0...v1.11.0) #### Changelog ##### New Features - [`6e65de4`](autobrr/qui@6e65de4): feat(torrents): add "não registrado" to unregistered status ([#​794](autobrr/qui#794)) ([@​fabricionaweb](https://github.com/fabricionaweb)) - [`ac5f8f3`](autobrr/qui@ac5f8f3): feat(torrents): add web seeds table ([#​808](autobrr/qui#808)) ([@​s0up4200](https://github.com/s0up4200)) - [`24559c9`](autobrr/qui@24559c9): feat(web): add Size default sort option to Tracker Breakdown table settings ([#​786](autobrr/qui#786)) ([@​thesecretlifeofabunny](https://github.com/thesecretlifeofabunny)) ##### Bug Fixes - [`69ed1a3`](autobrr/qui@69ed1a3): fix(api): respect baseURL for path autocompletion cap ([#​798](autobrr/qui#798)) ([@​Ryu481](https://github.com/Ryu481)) - [`0a721d0`](autobrr/qui@0a721d0): fix(crossseed): add verification and retry for async file renames ([#​789](autobrr/qui#789)) ([@​s0up4200](https://github.com/s0up4200)) - [`e9fcbda`](autobrr/qui@e9fcbda): fix(crossseed): pass source filters through to FindCandidates ([#​802](autobrr/qui#802)) ([@​s0up4200](https://github.com/s0up4200)) - [`b4f1ffa`](autobrr/qui@b4f1ffa): fix(crossseed): require strict HDR and Collection matching ([#​799](autobrr/qui#799)) ([@​s0up4200](https://github.com/s0up4200)) - [`4f3365b`](autobrr/qui@4f3365b): fix(sync): edited trackers no longer appear under old domain in sidebar ([#​792](autobrr/qui#792)) ([@​s0up4200](https://github.com/s0up4200)) - [`fcb081e`](autobrr/qui@fcb081e): fix(web): move global stats to bottom of torrents page ([#​800](autobrr/qui#800)) ([@​s0up4200](https://github.com/s0up4200)) - [`13b40b5`](autobrr/qui@13b40b5): fix(web): prevent Edit Tracker Name dialog overflow ([#​797](autobrr/qui#797)) ([@​s0up4200](https://github.com/s0up4200)) - [`8e3b352`](autobrr/qui@8e3b352): fix(web): replace completion filter inputs with MultiSelect dropdowns ([#​791](autobrr/qui#791)) ([@​s0up4200](https://github.com/s0up4200)) - [`adfd5bb`](autobrr/qui@adfd5bb): fix(web): restore piece size display in torrent details panel ([#​790](autobrr/qui#790)) ([@​s0up4200](https://github.com/s0up4200)) - [`5d97b49`](autobrr/qui@5d97b49): fix(web): sort trackers by display name in filter sidebar ([#​810](autobrr/qui#810)) ([@​s0up4200](https://github.com/s0up4200)) - [`2fad4e8`](autobrr/qui@2fad4e8): fix(web): use total counts for Seeds/Peers column filtering ([#​796](autobrr/qui#796)) ([@​s0up4200](https://github.com/s0up4200)) ##### Other Changes - [`1bf1b6e`](autobrr/qui@1bf1b6e): chore(crossseed): add debug logging for RSS and webhook source filters ([#​795](autobrr/qui#795)) ([@​s0up4200](https://github.com/s0up4200)) - [`95e4bc0`](autobrr/qui@95e4bc0): chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7 ([#​809](autobrr/qui#809)) ([@​dependabot](https://github.com/dependabot)\[bot]) **Full Changelog**: <autobrr/qui@v1.10.0...v1.11.0> #### Docker images - `docker pull ghcr.io/autobrr/qui:v1.11.0` - `docker pull ghcr.io/autobrr/qui:latest` #### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4zOS4xIiwidXBkYXRlZEluVmVyIjoiNDIuMzkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/2734 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Summary
h-[300px]) for vertical scrollingFixes #772
Summary by CodeRabbit
Release Notes
Style
Refactor
✏️ Tip: You can customize this high-level summary in your review settings.