feat(resources): browsable room finder with availability and dropdown filters#8264
Open
Rikdekker wants to merge 2 commits intonextcloud:mainfrom
Open
feat(resources): browsable room finder with availability and dropdown filters#8264Rikdekker wants to merge 2 commits intonextcloud:mainfrom
Rikdekker wants to merge 2 commits intonextcloud:mainfrom
Conversation
13 tasks
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
added 2 commits
May 5, 2026 22:44
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 nextcloud#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>
bd9b34d to
3edf2ae
Compare
Contributor
|
Hi @Rikdekker Thank you for the PR. I will review it as soon as I can. |
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.
Summary
Replace the search-based resource picker with a browsable room finder in the right column of the event editor. All room principals are loaded on mount, with real-time availability via free/busy queries. Filters are presented as
NcSelectdropdowns following the design feedback on #7996.This PR replaces #7996. Per @nimishavijay's scope feedback, the modal-layout improvements and hybrid meeting toggles from #7996 are intentionally left out and will be proposed in separate PRs later.
What
principalsStore.getRoomPrincipalsand shown as cardscheckResourceAvailability()fromfreeBusyService.js; updates within 500ms (debounced) when start/end date changesroomAddress(depends on the principal mapping in the prerequisite PR)NcSelectdropdowns for Building, Floor, and Features (populated from actual room metadata)Why this PR addresses the previous review feedback
<script setup>ResourceList.vueandResourceRoomCard.vueuse<script setup lang=\"ts\">ResourceListItem.vueandResourceListSearch.vueisViewedByOrganizerguard inonMountedEditFull.vueNcSelectdropdowns instead of filter chipsNcSelectfor Building / Floor / FeaturesNcButton,NcCheckboxRadioSwitch,NcLoadingIcon,NcTextField,NcSelectResourceList.vue,ResourceRoomCard.vue, andresourceProps.jsFiles
src/components/Editor/Resources/ResourceList.vue— replaced (244 → ~600 lines)src/components/Editor/Resources/ResourceRoomCard.vue— newsrc/components/Editor/Resources/ResourceListItem.vue— deleted (no longer used)src/components/Editor/Resources/ResourceListSearch.vue— deleted (no longer used)src/models/resourceProps.js— addsformatFacility()helper and extendsgetAllRoomTypes()with additional standard room typesDependency
This PR depends on the principal-mapping PR. Please merge that first:
feat(principal): map CalDAV room metadata properties(Alternatively, if you'd prefer, I can rebase this PR onto
mainonce #8263 is merged.)Related
Test plan
npm run test:unitpasses