Commit Graph

67 Commits

Author SHA1 Message Date
Camille Moussu 531d29f2ce [#313] removed withRights (#354)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-11-24 21:32:15 +01:00
lenhanphung bff1af31bd Fix: Preserve timezone used in create and update modal (#301)
- 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
2025-11-20 09:32:15 +01:00
lenhanphung ffe204d60b refactor: stabilize calendar loading effects and menubar redirect
- Memoize calendar range strings and stabilize effect deps
- Guard updateDarkColor to avoid dispatch loops
- Add resilient cache-clear handling with refs
- Memoize calendar/temp ids to prevent rerenders
- Update event handler hooks with missing deps
- Add guards and dependency fixes across Calendar effects
2025-11-18 10:40:19 +01:00
lenhanphung 990e290066 feat: implement parallel calendar loading with batch processing
- 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
2025-11-18 10:40:19 +01:00
Camille Moussu 917954f7a5 [#310] fix color error + strenghtened test on missing apple:color (#314)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-11-14 08:51:44 +01:00
Camille Moussu 85ccf8e14d [#271] abort truly goes through when removing user in cal search (#295)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-11-13 09:24:34 +01:00
Camille Moussu 6305f55d1a [#67] added export calendar functionnality (#294)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-11-12 20:42:35 +01:00
Camille Moussu daed6d97ed [#69] added secret link for calendars (#284)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
Co-authored-by: Benoit TELLIER <btellier@linagora.com>
2025-11-07 08:30:47 +01:00
Camille Moussu 42f5d8e1a9 #204 Error management (#237)
* 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>
2025-10-27 11:23:38 +01:00
Camille Moussu 9c5abb7fbd [#242] fixed calendar color creation API call (#243)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-10-24 13:14:19 +02:00
Camille Moussu 8813bff48c Calendar subscription naming (#235)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-10-24 12:47:18 +02:00
Camille Moussu 34363562cc Color picker rework (#232)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-10-24 01:20:56 +02:00
Camille Moussu f278caf041 [#168] changed temp calendar reload to reload only thoses that are impacted 2025-10-17 11:26:50 +02:00
Camille Moussu 29f984b347 [#168] added refresh to temp calendars when updating 2025-10-17 11:26:50 +02:00
lenhanphung af47923478 fix: recurring events edit all instances issues
- 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
2025-10-15 08:29:28 +02:00
lenhanphung 59e7992cfe refactor: implement optimistic updates for recurring event edits
- 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
2025-10-15 08:29:28 +02:00
Camille Moussu 770257c03b [#154] added timezone component to change timezone of calendar (#207)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-10-14 15:25:28 +02:00
Camille Moussu c86db8fa49 refactor recurring event modification (#173) 2025-10-07 18:16:00 +02:00
Camille Moussu 40c383c334 Revamp calendar dialog (#158)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-10-07 11:14:08 +02:00
lenhanphung f99b3fb223 css: fix prettier and hidden slot minor 2025-10-03 17:31:24 +07:00
lenhanphung 4ef3a887ee fix: resolve infinite loop and week calculation issues in EventModal
- 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
2025-10-03 17:22:19 +07:00
lenhanphung f245991816 feat: improve video conference UI in EventModal
- 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
2025-10-03 14:51:40 +07:00
Camille Moussu 475ab79731 Delete Calendars (#148)
* [#66] added delete popup and logic

* [#66] Homogenize Dialogs components between modify and delete to keep them coherent+ fixed tests

* [#66] added tests

* [#66] text adjusment

* fixup! [#66] added delete popup and logic

---------

Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-09-30 10:27:47 +02:00
Camille Moussu 00c0b58032 sidebar availability search (#128)
* [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>
2025-09-24 17:05:45 +02:00
Camille Moussu cd724a30a0 ability to register a shared calendar (#118)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-09-22 20:45:02 +02:00
lenhanphung e24aa40cce fix(user): guard openpaasId access during initial render\n\n- Use optional chaining across components reading userData.openpaasId\n- Prevent F5 crash when user data not yet hydrated\n- Cleanup unused imports 2025-09-19 14:29:10 +07:00
Camille Moussu f640cac8ac update cal details (#113)
* [#65] added button to access cal details

* [#65] added proppatch call

* [#65] added tests

* fixup! [#65] added proppatch call

* [#65] added trimming to name and desc

* fixup! [#65] added proppatch call

* fixup! [#65] added proppatch call

* fixup! [#65] added proppatch call

---------

Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-09-17 15:05:27 +02:00
Camille Moussu 2a84eba84b [#64] fixed css and empty name bug 2025-09-15 10:25:39 +02:00
Camille Moussu 9d43c15ee0 [#64] added creation modal to list and api call 2025-09-15 10:25:39 +02:00
Camille Moussu d76775c7d2 [#106] added prettier check to jenkins and prettified files (#109)
Co-authored-by: Camille Moussu <cmoussu@linagora.com>
2025-09-12 11:05:52 +02:00
Camille Moussu 3e9530a0a5 [#78] fixed undefined email 2025-09-09 14:52:51 +02:00
Camille Moussu 3d48cd7fd7 [#78] fixed f5 update 2025-09-09 11:53:13 +02:00
Camille Moussu b87b77beef [#78] added valarm support 2025-09-09 11:53:12 +02:00
Camille Moussu 2f071303de [#77] fixed delete refresh issue and added more tests 2025-09-05 16:41:05 +02:00
Camille Moussu 6de3280851 [#77] fixed occurrences other typo, augmented the match window to update the calendar 2025-09-04 18:06:32 +02:00
Camille Moussu ee01e1d027 [#77] added complex ui for repetition, fixed broken tests due to new feature 2025-09-02 18:14:55 +02:00
Camille Moussu 64f3ff0aa4 [#7] fixed move destination 2025-08-29 10:21:43 +02:00
Camille Moussu a2b0ab32b7 [#7] added MOVE support for changing calendar for event + missing tests for this PR 2025-08-28 13:08:10 +02:00
Camille Moussu 5864875775 [#7] restored refresh after modification 2025-08-26 14:46:10 +02:00
Camille Moussu 502b6d6783 [#7] added saving to editing event 2025-08-26 14:17:14 +02:00
Camille Moussu e8a0ac41ef [#7] skeleton for complexe display 2025-08-25 17:01:18 +02:00
Camille Moussu 684fd82027 [#4] event url is now stored and reused when updating event to prevent duplication 2025-08-25 09:47:43 +02:00
Camille Moussu aaba50cf00 [#4] added delegated calendars 2025-08-21 16:00:49 +02:00
Camille Moussu cc262d6816 [#4] fix test and imports 2025-08-21 16:00:48 +02:00
Camille Moussu cd829703e9 [#4] attendance now change event display 2025-08-21 15:56:34 +02:00
Camille Moussu b3d85eb15c [#4] added attendance management 2025-08-21 15:49:34 +02:00
Camille Moussu a6c6f944a6 [#50] fixed mailto duplication 2025-08-21 13:18:41 +02:00
Camille Moussu d7b3d4e077 [#50] added attendee search and tests 2025-08-21 13:18:41 +02:00
Camille Moussu 22ebf31f77 [#48] fixed drag and drop waiting for api call to be done to show updated event 2025-08-19 15:27:54 +02:00
Camille Moussu cf59bcebe4 [#48] added drag and drop and resize changes to events 2025-07-31 17:51:55 +02:00