Improve accessibility of room dashboard#2970
Conversation
|
Warning Review limit reached
More reviews will be available in 36 minutes and 40 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
WalkthroughAccessibility improvements to the rooms index: adds room-scoped translation keys for favorites and metadata labels, restructures ChangesRoom List Accessibility
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 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 |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #2970 +/- ##
=============================================
- Coverage 97.15% 97.15% -0.01%
Complexity 1948 1948
=============================================
Files 477 477
Lines 16547 16546 -1
Branches 2409 2407 -2
=============================================
- Hits 16077 16075 -2
- Misses 470 471 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
PILOS
|
||||||||||||||||||||||||||||
| Project |
PILOS
|
| Branch Review |
a11y-room-index
|
| Run status |
|
| Run duration | 07m 36s |
| Commit |
|
| Committer | Samuel Weirich |
| View all properties for this run ↗︎ | |
| Test results | |
|---|---|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
0
|
|
|
635
|
| View all changes introduced in this branch ↗︎ | |
0ea2897 to
abe2700
Compare
# Conflicts: # resources/js/components/RoomCard.vue
abe2700 to
3ddf1d4
Compare
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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 `@resources/js/components/RoomCard.vue`:
- Around line 3-5: Remove the tabindex="0" attribute from the <li> element with
data-test="room-card" in the RoomCard.vue component. This attribute makes the
list item itself focusable as a non-interactive tab stop, which creates an
unnecessary keyboard navigation point. Since the actual interactive content
(links/buttons) within the card should handle keyboard focus, the root <li>
element does not need explicit tabindex.
In `@resources/js/views/RoomsIndex.vue`:
- Around line 478-481: The loadRooms function uses
document.getElementsByTagName("h1")[0] to focus the first h1 element globally,
which can target the wrong heading if multiple h1 elements exist on the page.
Replace this global DOM query with a local template ref. Create a template ref
on the page heading h1 element in the RoomsIndex.vue template, then update the
focus call in loadRooms to use this ref instead of the global document query,
ensuring focus behavior is deterministic and scoped to this view.
🪄 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: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 1ab9a01f-7362-491e-bba9-821077b62a48
📒 Files selected for processing (12)
lang/en/rooms.phpresources/css/app/_room.cssresources/js/components/RoomCard.vueresources/js/components/RoomDetailsList.vueresources/js/components/RoomFavoriteButton.vueresources/js/components/RoomTypeBadge.vueresources/js/views/RoomsIndex.vuetests/Frontend/e2e/AdminRoomTypesEdit.cy.jstests/Frontend/e2e/AdminRoomTypesNew.cy.jstests/Frontend/e2e/AdminRoomTypesView.cy.jstests/Frontend/e2e/RoomsIndex.cy.jstests/Frontend/e2e/RoomsViewGeneral.cy.js
There was a problem hiding this comment.
Pull request overview
Improves accessibility and screen-reader context on the Rooms index/dashboard by adding more descriptive ARIA labels, better semantic structure for room cards/headings, and focus management when filters change.
Changes:
- Enhanced room card semantics (list +
<h2>links) and focus styling/behavior on the Rooms index. - Added more descriptive screen-reader labels (favorites, details, owner, room type, short description).
- Updated Cypress E2E tests and changelog entries to reflect the accessibility changes.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/Frontend/e2e/RoomsViewGeneral.cy.js | Updates expected favorites button aria-labels to include room context. |
| tests/Frontend/e2e/RoomsIndex.cy.js | Updates expected favorites aria-labels on the rooms index scenarios. |
| tests/Frontend/e2e/AdminRoomTypesView.cy.js | Adjusts room type badge text expectation due to added SR-only prefix. |
| tests/Frontend/e2e/AdminRoomTypesNew.cy.js | Adjusts room type badge text expectation due to added SR-only prefix. |
| tests/Frontend/e2e/AdminRoomTypesEdit.cy.js | Adjusts room type badge text expectation due to added SR-only prefix. |
| resources/js/views/RoomsIndex.vue | Adds focusable main heading, aria-pressed for favorites filter, and switches card container to a semantic list. |
| resources/js/components/RoomTypeBadge.vue | Adds SR-only “Room type:” prefix for improved context. |
| resources/js/components/RoomHeader.vue | Reorders markup to have screen readers announce room name before room type. |
| resources/js/components/RoomFavoriteButton.vue | Uses contextual favorites labels including the room name. |
| resources/js/components/RoomDetailsList.vue | Adds SR-only labels for owner/short description and hides decorative icons from AT. |
| resources/js/components/RoomCard.vue | Converts card to <li>, uses <router-link><h2> for navigation, and contextualizes “show details” ARIA labels. |
| resources/css/app/_room.css | Adds focus ring styling for room cards using :focus-within (and refines outline behavior). |
| lang/en/rooms.php | Adds new English translation keys for contextual labels and room metadata labels. |
| lang/en/meetings.php | Tweaks English wording for view_room label. |
| CHANGELOG.md | Documents the accessibility updates for the room index. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Type
Checklist
Changes
Other information
Summary by CodeRabbit
Accessibility Improvements
aria-pressed) and improved dialog/readout orderNew Features
Tests