- Fix timezone field display in event modals to show original timezone from server
- Fix formatDateToICal to use moment.utc(date).tz(timezone) for correct UTC instant preservation
- Fix parseCalendarEvent to convert event.start/end to ISO UTC strings after parsing
- Fix eventToFullCalendarFormat to ensure event times are ISO UTC before passing to FullCalendar
- Fix getEvent to normalize event.start/end to ISO UTC strings
- Ensure event.timezone is always set (defaults to Etc/UTC if not detected)
- Update eventUtils.test.ts to match new timezone conversion logic
- Fix event time shift issue on calendar grid display
This ensures:
- Events display in correct time slots on calendar grid
- Event times are correctly converted between timezones
- Original timezone from server is preserved and displayed
- All event times are stored as ISO UTC strings internally
* refactor: eliminate datetime format detection code duplication
- Add constants for datetime format strings and magic number (DATETIME_WITH_SECONDS_LENGTH, DATETIME_FORMAT_WITH_SECONDS, DATETIME_FORMAT_WITHOUT_SECONDS)
- Create shared detectDateTimeFormat() function to replace duplicated format detection logic
- Refactor convertFormDateTimeToISO, convertEventDateTimeToISO, and convertDateTimeStringToISO to use shared helper
- Add console.warn logging when invalid datetime is encountered (addresses silent fallback issue)
- Add comprehensive test coverage for dateTimeHelpers with full test suite
- Refactor getCalendarsListAsync to batch fetch getUserDetails
- Deduplicate ownerIds before fetching
- Process in batches of 20 with Promise.all
- Add error handling with fallback data
- Implement batch loading for selected calendar events
- Load events in batches of 5 calendars
- Use sorted selectedCalendars to prevent infinite loops
- Add cancellation support for cleanup
- Add prefetch mechanism for hidden calendars
- Prefetch calendars not currently selected
- Track prefetched state to avoid duplicate requests
- Non-blocking background loading
- Apply batch loading to temp calendars
- Separate cache tracking for temp calendars
- Batch load temp calendar events
- Clean up cache when temp calendars are removed
* added error snackbar for api fails
* improved error page to be shown only for userdata errors and to allow retrying
* fixed test breaking only in local because of timezone and reduced warnings for easier reading of tests results
* added error management for failure inside calendars imports
* added error snackbar for api fails
* improved error page to be shown only for userdata errors and to allow retrying
* added error management for failure inside calendars imports
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
- Fix master event detection in getEvent() to find VEVENT without recurrence-id
- Add removeOverrides parameter to updateSeries() to control override deletion
- Fetch master event when editing 'all events' to preserve original start date
- Combine master's date with form's time when updating all instances
- Detect time changes separately from date changes to preserve optimistic updates
- Only remove overrides when date/time/timezone/repeat rules change
- Keep overrides when only properties (title, description, etc) change
Fixes:
1. Old UI not cleared when editing all events
2. Start date not preserved when editing from different instance
3. Solo overrides incorrectly removed when only properties changed
4. Optimistic updates lost when editing recurring events
- Replace refreshCalendars() with optimistic Redux updates for update all instances
- Add rollback mechanism: revert to old data if API fails
- Add notification placeholder function (ready for future toast implementation)
- Update single instance also uses optimistic update + rollback pattern
- Remove unnecessary refreshCalendars and getCalendarRange imports
- No view reload, instant UI updates, smooth UX
Performance improvements:
- API calls reduced from N+1 to 1 (eliminated fetch for all calendars)
- UI update time reduced from ~1s to <50ms
- Consistent behavior across all update operations
- Fix infinite loop in EventModal useEffect by using useRef for userPersonnalCalendars
- Fix weekStart calculation in putEventAsync to use Monday as first day (consistent with FullCalendar firstDay=1)
- Add computeWeekRange utility function for consistent week calculations
- Improve state reset logic when closing EventModal popup
- Ensure repeat checkbox state is properly reset to prevent stale repetition data
- Replace 'Meeting link generated' text with 'Join Visio conference' button
- Button opens video conference link in new tab when clicked
- Use contained variant styling to match Save button appearance
- Maintain copy and delete functionality for meeting links
* [123] added people search in left side bar
* [#123] added toggle temp calendars
* [#123] added tests]
* fixup! [123] added people search in left side bar
* fixup! [#123] added toggle temp calendars
* [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] fixed event creation on Enter
* [#123] added color diff for temp calendars
* fixup! [#123] fixed event creation on Enter
* fixup! [#123] added tests]
* fixup! [#123] added toggle temp calendars
---------
Co-authored-by: Camille Moussu <cmoussu@linagora.com>