feat: room browser design - #8718
Closed
nimishavijay wants to merge 8 commits into
Closed
Conversation
Extend the principal model to extract room-seating-capacity, room-type, room-features, room-building-address, and room-building-room-number from CalDAV principal responses. These properties are defined in the CalDAV standard and already served by Nextcloud room backends, but not yet used by the Calendar frontend. Mapping them into the principal model makes them available for any future UI improvement (e.g. a browsable room finder) without changing how principals are fetched. Backward compatible: properties default to null when not provided by the backend. Also derives roomBuildingName from the building address (first segment) and constructs a roomAddress string suitable for the event LOCATION field. Signed-off-by: Rik Dekker <rik@rikdekker.nl>
… filters Replace the search-based resource picker with a browsable room finder that loads all room principals on mount and shows their availability in real time via free/busy queries. UI follows the design feedback from @jancborchardt on PR #7996: right-column placement (Outlook-style), NcSelect dropdowns for Building/Capacity/Floor/Features (no chips), text search, and a "Show unavailable" toggle. Each room is rendered as a compact card with availability status, capacity, and add/remove action. Selecting a room auto-fills the event LOCATION property using the roomAddress derived from CalDAV building-address and room-number metadata. Implementation reuses existing services and components: - principalsStore.getRoomPrincipals for initial load - checkResourceAvailability() from freeBusyService.js for availability - @nextcloud/vue: NcSelect, NcTextField, NcCheckboxRadioSwitch, NcLoadingIcon, NcButton Removes the now-redundant ResourceListItem.vue and ResourceListSearch.vue. Adds formatFacility() helper and extends getAllRoomTypes() in resourceProps.js with additional standard room types (board room, conference room, rehearsal room, studio, outdoor area). Components are written in TypeScript with Composition API and <script setup>, following the Sebastian Krupinski review feedback. Depends on the principal.js room metadata mapping (feat(principal): map CalDAV room metadata properties). Signed-off-by: Rik Dekker <rik@rikdekker.nl>
Address review feedback from @GVodyanov: replace hardcoded pixel spacing with --default-grid-baseline and drop hardcoded hex colour fallbacks in favour of the bare --color-success-text / --color-error-text variables. Normalise the group-header chevron icon size to 20 to match the section MapMarker icon. Border widths (1-3px hairline/accent borders) are intentionally kept as raw px as Nextcloud has no grid variable for them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Rik Dekker <rik@rikdekker.nl>
…ropdown filters Signed-off-by: Oleksandr Dzhychko <hey@oleks.dev>
…ropdown filters Signed-off-by: Oleksandr Dzhychko <hey@oleks.dev>
…ropdown filters Signed-off-by: Oleksandr Dzhychko <hey@oleks.dev>
…rowser-v2 Signed-off-by: Oleksandr Dzhychko <hey@oleks.dev>
…. Assisted-by: ClaudeCode:claude-opus5 Signed-off-by: nimishavijay <nimisha.k.vijay@gmail.com>
nimishavijay
requested review from
GVodyanov,
SebastianKrupinski and
tcitworld
as code owners
August 11, 2026 19:09
Contributor
|
Thanks @nimishavijay We'll take it from here |
1 task
Rikdekker
added a commit
to Rikdekker/calendar
that referenced
this pull request
Aug 13, 2026
Labels sat inside the text fields but above the selects, so the filter row lined up on neither the labels nor the field boxes, and the controls had different heights. Give every filter the same shape: a label above its control, in a grid that reflows by available width. Matches the design in nextcloud#8718, which labels its filters the same way and leaves the search field to its placeholder. Also collapse the search input of a closed select. vue-select keeps it next to the selected value, where it has nothing to type into and only leaves a stray caret; it regains its width when the dropdown opens. Assisted-by: ClaudeCode:claude-opus-5 Signed-off-by: Rikdekker <Rikdekker@users.noreply.github.com>
Rikdekker
added a commit
to Rikdekker/calendar
that referenced
this pull request
Aug 13, 2026
The filter row lined up on neither the labels nor the field boxes: a text field puts its label inside the border, a select puts it above. Give every filter the same shape — a label above its control — and lay them out two per row, which is what fits: a select keeps a min-width of 260px, so four side by side ran past the edge of the dialog. Follows the filter layout of the design in nextcloud#8718. Also join the meta line of a card into one string. It was assembled from separate parts with a generated separator, which ended up in the accessibility tree as a stray character for every card of a collapsed building. Assisted-by: ClaudeCode:claude-opus-5 Signed-off-by: Rikdekker <Rikdekker@users.noreply.github.com>
Contributor
|
Took over and adapted in #8731. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is just a visual reference for PR #8264 which needs design feedback. Directly made code changes so the CSS is easier to reference rather than recreate from scratch, feel free to take over it :) Note: I am NOT a professional developer and made this using mostly AI, so take the validity of the code in this with a grain of salt, apologies for any spaghetti 🙈
The main idea is to move the room browser into a modal so it's easier to see. As far as I could tell the resources were also not considered, so I added that too.
Brief description of the ideal design, other than the nitty-gritty visuals which are best referenced in the screenshots and code:
Dialog:
Room card:
room-browser.mp4
There may be some small papercuts and such later on, but this is the general idea :)
cc @odzhychko
🤖 AI (if applicable)