Danke @anko127 für den Bericht
Es gab tatsächlich ein Problem, bei dem der Kalender Meine Veranstaltungen die Veranstaltung bei jeder kommenden Wiederholung anzeigte, auch wenn Sie nur für die nächste RSVP gegeben hatten.
main ← fix-recurring-rsvp-my-events
opened 10:09PM - 11 Jun 26 UTC
Addresses the **My events** calendar issue reported in [meta t/335780](https://m… eta.discourse.org/t/repeating-event-going-gets-not-deleted-anymore/335780), and improves how the event popup loads.
## FIX: Single-occurrence RSVPs filled the "My events" calendar
When a member RSVPs "going" to only the next occurrence of a recurring event (not the whole series), the personal **My events** calendar — and the personal ICS feed — listed the event on _every_ occurrence instead of just the one they joined.
`EventFinder` matches an event for `attending_user` whenever the member is a "going" invitee, ignoring the invitee's `recurring` flag, and the events endpoint then expands the full recurrence series. The per-occurrence invitee list already filtered single RSVPs out of future occurrences, but the calendar/feed query did not.
`ExpandOccurrences` gains a `current_occurrence_only` option that returns only the event's current occurrence (when it falls inside the requested window). `EventsController#index` sets it for the attending member's non-recurring "going" RSVPs, in both the JSON and ICS responses. RSVPs to every occurrence still expand fully; the non-personal calendars (all events / category) are unaffected.
This is a targeted fix — properly modelling per-occurrence RSVPs (storing each date instead of only the recurrence formula) remains a larger follow-up.
## UX: Render event popup details immediately instead of a spinner
Clicking an event opened a popup that showed only a loading spinner until a full event fetch resolved — slow on poor connections. The component wrapped its whole body in `DAsyncContent`, blocking every field on the request even though the calendar already provides each event's core fields (`BasicEventSerializer`) and the inline post widget provides the complete event (`EventSerializer`).
It now renders the data already on the client immediately (title, date, recurrence) and fills in the rest (creator, attendees, RSVP buttons) when the background request returns. Inline event widgets in a topic render fully with no fetch at all (and no longer fire a redundant request). Still-loading sections use core's `.placeholder-animation` shimmer.
## Testing
- Request spec — single-occurrence RSVP returns one occurrence; all-occurrences RSVP returns the series.
- Service spec — `current_occurrence_only` returns the current occurrence only when it is inside the window.
- System spec — a daily recurring event RSVPed once shows a single tile on `/upcoming-events/mine`.
- Existing popup integration + system specs cover the immediate-render behaviour.
4 „Gefällt mir“