feat: display all meeting occurrences - WPB-20278 - #5081
Conversation
…ay-recurring-meetings-WPB-20278 # Conflicts: # WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/MeetingsView.swift # WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/MeetingsViewModel.swift
There was a problem hiding this comment.
Pull request overview
This PR updates the meetings feature to display recurring meetings as individual occurrence rows (starting from the beginning of the current day) and adjusts participant presentation so the self user and other members appear in a consistent display order.
Changes:
- Introduces
MeetingOccurrenceand pagination logic to expand recurring meetings into occurrence rows and page over occurrences. - Updates meetings list UI/view models and grouping to operate on occurrences instead of meetings.
- Extends
MeetingMemberwithisSelfUserand updates member ordering + tests accordingly.
Reviewed changes
Copilot reviewed 25 out of 25 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| WireDomain/Sources/WireDomain/Repositories/Meetings/MeetingLocalStore.swift | Populates the new isSelfUser field when mapping conversation participants to meeting members. |
| WireCalling/Tests/WireCallingTests/WireMeetings/PresentationTests/Views/EditMeetingFormViewSnapshotTests.swift | Updates snapshot fixtures for the expanded MeetingMember initializer. |
| WireCalling/Tests/WireCallingTests/WireMeetings/PresentationTests/MemberSelectionViewModelTests.swift | Updates MeetingMember test fixtures for the new initializer fields. |
| WireCalling/Tests/WireCallingTests/WireMeetings/PresentationTests/MeetingsViewModelTests.swift | Adjusts paging expectations and adds coverage for deleting a meeting removing all loaded occurrences. |
| WireCalling/Tests/WireCallingTests/WireMeetings/PresentationTests/MeetingFormViewModelTests.swift | Adds coverage for editing recurring meetings that started in the past; updates time interval usage. |
| WireCalling/Tests/WireCallingTests/WireMeetings/DomainTests/UpdateMeetingUseCaseTests.swift | Updates fixtures for the expanded MeetingMember initializer. |
| WireCalling/Tests/WireCallingTests/WireMeetings/DomainTests/FetchUpcomingMeetingsUseCaseTests.swift | Updates use case tests to validate occurrence expansion, pagination, until-date cutoff, and page-size capping. |
| WireCalling/Tests/WireCallingTests/WireMeetings/DomainTests/CreateMeetingUseCaseTests.swift | Updates fixtures for the expanded MeetingMember initializer. |
| WireCalling/Tests/WireCallingTests/WireMeetings/DataTests/MeetingRepositoryTests.swift | Updates repository test fixtures for the expanded MeetingMember initializer. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/MeetingsViewModel.swift | Switches in-memory state and paging from meetings to occurrences and updates delete behavior accordingly. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/MeetingsView.swift | Renders grouped sections and rows using MeetingOccurrence while preserving edit/delete actions on the series. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/MeetingsGrouper.swift | Updates grouping/sorting to operate on occurrences. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/Meeting/MemberAvatarsView.swift | Implements ordering rules (self user first, then by name/handle) for avatar display. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingsView/Meeting/MeetingRow.swift | Updates row rendering to be occurrence-based and delegates member ordering to MemberAvatarsView. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingForm/MemberSelection/MemberSelectionView.swift | Updates local member fixture helper for the new MeetingMember initializer fields. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingForm/MeetingFormViewModel.swift | Adjusts edit-mode behavior for past recurring meetings to use the next editable occurrence time. |
| WireCalling/Sources/WireCallingUI/Views/WireMeetings/MeetingForm/MeetingFormView.swift | Updates local member fixture helper for the new MeetingMember initializer fields. |
| WireCalling/Sources/WireCallingDomain/WireMeetings/UseCases/MeetingOccurrencePaginator.swift | Adds an occurrence expansion/pagination implementation for recurring meetings. |
| WireCalling/Sources/WireCallingDomain/WireMeetings/UseCases/FetchUpcomingMeetingsUseCase.swift | Changes “upcoming meetings” to compute and page over occurrence rows (and caps page size). |
| WireCalling/Sources/WireCallingDomain/WireMeetings/Protocols/FetchUpcomingMeetingsUseCaseProtocol.swift | Updates documentation to reflect occurrence-based fetching semantics. |
| WireCalling/Sources/WireCallingDomain/WireMeetings/Model/PaginatedGroupedMeetings.swift | Switches pagination container to occurrences while keeping a derived meetings view for compatibility. |
| WireCalling/Sources/WireCallingDomain/WireMeetings/Model/MeetingOccurrence.swift | Introduces the occurrence model + ID for stable list identity. |
| WireCalling/Sources/WireCallingDomain/WireMeetings/Model/MeetingMember.swift | Adds isSelfUser to support self-first ordering and updates initializer contract. |
| wire-ios/Wire-iOS/Sources/UserInterface/Calling/Meetings/WireMeetingsMemberRepository.swift | Updates meeting member search mapping to satisfy the new MeetingMember initializer. |
| wire-ios-sync-engine/Source/UserSession/ZMUserSession/ZMUserSession.swift | Adjusts MLS recovery loop’s application-state check to run on the MainActor. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Test Results – batch 0 2 files 160 suites 21s ⏱️ Results for commit 5d4c255. ♻️ This comment has been updated with latest results. |
Test Results – batch 13 071 tests 3 044 ✅ 3m 43s ⏱️ Results for commit 5d4c255. ♻️ This comment has been updated with latest results. |
|
@caldrian There is an issue with displaying "Attending" and "Join" button. We should show one of this label/button just per one recurring meeting (current day), not for all of them. Maybe this is actually an issue with "Attending" and "Join" buttons. what do you think? |
I provided a fix for the attending label being shown. The join button is not implemented yet I think. @KaterinaWire |
Issue
This PR fixes displaying meetings including occurrences.
Also the participants are now ordered correctly.
Testing
Create a repeating meeting and observe that the list of meetings now also shows the occurrences.
Checklist
[WPB-XXX].UI accessibility checklist
If your PR includes UI changes, please utilize this checklist: