Co-authored-by: Camille Moussu <cmoussu@linagora.com>
This commit is contained in:
@@ -16,6 +16,7 @@ import {
|
|||||||
saveEventFormDataToTemp,
|
saveEventFormDataToTemp,
|
||||||
showErrorNotification,
|
showErrorNotification,
|
||||||
} from "@/utils/eventFormTempStorage";
|
} from "@/utils/eventFormTempStorage";
|
||||||
|
import { useSelectedCalendars } from "@/utils/storage/useSelectedCalendars";
|
||||||
import {
|
import {
|
||||||
browserDefaultTimeZone,
|
browserDefaultTimeZone,
|
||||||
getTimezoneOffset,
|
getTimezoneOffset,
|
||||||
@@ -61,6 +62,7 @@ function EventPopover({
|
|||||||
}) {
|
}) {
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
const selectedCalendarIds = useSelectedCalendars();
|
||||||
|
|
||||||
const userOrganizer = useAppSelector((state) => state.user.organiserData);
|
const userOrganizer = useAppSelector((state) => state.user.organiserData);
|
||||||
const userId =
|
const userId =
|
||||||
@@ -98,10 +100,25 @@ function EventPopover({
|
|||||||
const [location, setLocation] = useState(event?.location ?? "");
|
const [location, setLocation] = useState(event?.location ?? "");
|
||||||
const [start, setStart] = useState(event?.start ? event.start : "");
|
const [start, setStart] = useState(event?.start ? event.start : "");
|
||||||
const [end, setEnd] = useState(event?.end ? event.end : "");
|
const [end, setEnd] = useState(event?.end ? event.end : "");
|
||||||
const defaultCalendarId = useMemo(
|
const defaultCalendarId = useMemo(() => {
|
||||||
() => userPersonalCalendars[0]?.id ?? "",
|
const selectedAndWritable = Object.values(calList ?? {})
|
||||||
[userPersonalCalendars]
|
.filter((cal) => selectedCalendarIds.includes(cal.id))
|
||||||
);
|
.filter(
|
||||||
|
(cal) =>
|
||||||
|
(cal.delegated && cal.access?.write) ||
|
||||||
|
userId === cal.id?.split("/")[0]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (selectedAndWritable.length > 0) {
|
||||||
|
return selectedAndWritable[0].id!;
|
||||||
|
}
|
||||||
|
|
||||||
|
const firstPersonal = Object.values(calList ?? {}).find(
|
||||||
|
(cal) =>
|
||||||
|
cal.id?.split("/")[0] === userId || (cal.delegated && cal.access?.write)
|
||||||
|
);
|
||||||
|
return firstPersonal?.id ?? "";
|
||||||
|
}, [selectedCalendarIds, calList, userId]);
|
||||||
|
|
||||||
const [calendarid, setCalendarid] = useState(
|
const [calendarid, setCalendarid] = useState(
|
||||||
event?.calId ?? defaultCalendarId
|
event?.calId ?? defaultCalendarId
|
||||||
@@ -146,17 +163,20 @@ function EventPopover({
|
|||||||
const userPersonalCalendarsRef = useRef(userPersonalCalendars);
|
const userPersonalCalendarsRef = useRef(userPersonalCalendars);
|
||||||
// Track when restoring from error to prevent other useEffects from overriding restored data
|
// Track when restoring from error to prevent other useEffects from overriding restored data
|
||||||
const isRestoringFromErrorRef = useRef(false);
|
const isRestoringFromErrorRef = useRef(false);
|
||||||
|
// Track whether the user has explicitly picked a calendar so we don't override their choice
|
||||||
|
const isCalendarIdUserSelectedRef = useRef(false);
|
||||||
|
|
||||||
// Update ref when userPersonalCalendars changes
|
// Update ref when userPersonalCalendars changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
userPersonalCalendarsRef.current = userPersonalCalendars;
|
userPersonalCalendarsRef.current = userPersonalCalendars;
|
||||||
}, [userPersonalCalendars]);
|
}, [userPersonalCalendars]);
|
||||||
|
|
||||||
|
// Sync calendarid whenever defaultCalendarId resolves, unless the user already picked one
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!calendarid && defaultCalendarId) {
|
if (!isCalendarIdUserSelectedRef.current && defaultCalendarId) {
|
||||||
setCalendarid(defaultCalendarId);
|
setCalendarid(defaultCalendarId);
|
||||||
}
|
}
|
||||||
}, [calendarid, defaultCalendarId]);
|
}, [defaultCalendarId]);
|
||||||
|
|
||||||
const resetAllStateToDefault = useCallback(() => {
|
const resetAllStateToDefault = useCallback(() => {
|
||||||
setShowMore(false);
|
setShowMore(false);
|
||||||
@@ -606,6 +626,12 @@ function EventPopover({
|
|||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Wrap setCalendarid so we can track explicit user selections
|
||||||
|
const handleCalendaridChange = useCallback((id: string) => {
|
||||||
|
isCalendarIdUserSelectedRef.current = true;
|
||||||
|
setCalendarid(id);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
// Clear temp data when user manually closes modal
|
// Clear temp data when user manually closes modal
|
||||||
clearEventFormTempData("create");
|
clearEventFormTempData("create");
|
||||||
@@ -615,6 +641,7 @@ function EventPopover({
|
|||||||
setStart("");
|
setStart("");
|
||||||
setEnd("");
|
setEnd("");
|
||||||
shouldSyncFromRangeRef.current = true; // Reset for next time
|
shouldSyncFromRangeRef.current = true; // Reset for next time
|
||||||
|
isCalendarIdUserSelectedRef.current = false; // Reset so next open gets fresh default
|
||||||
};
|
};
|
||||||
|
|
||||||
// Function to save current form data to temp storage
|
// Function to save current form data to temp storage
|
||||||
@@ -926,7 +953,7 @@ function EventPopover({
|
|||||||
timezone={timezone}
|
timezone={timezone}
|
||||||
setTimezone={setTimezone}
|
setTimezone={setTimezone}
|
||||||
calendarid={calendarid}
|
calendarid={calendarid}
|
||||||
setCalendarid={setCalendarid}
|
setCalendarid={handleCalendaridChange}
|
||||||
hasVideoConference={hasVideoConference}
|
hasVideoConference={hasVideoConference}
|
||||||
setHasVideoConference={setHasVideoConference}
|
setHasVideoConference={setHasVideoConference}
|
||||||
meetingLink={meetingLink}
|
meetingLink={meetingLink}
|
||||||
|
|||||||
Reference in New Issue
Block a user