fix: resolve timezone properly in TimezoneSelector and EventModal

- Resolve timezone alias to main timezone in TimezoneSelector before passing to TimezoneAutocomplete
- Resolve timezone in EventModal useState initialization to ensure correct timezone display
- Sync resolved timezone when modal opens or Redux timezone changes
- Ensure timezone is always resolved in resetAllStateToDefault callback
- Fix issue where TimezoneAutocomplete doesn't show correct timezone on first load
This commit is contained in:
lenhanphung
2025-10-16 16:16:05 +07:00
committed by Benoit TELLIER
parent 6421f53a8d
commit ed8bb41ca9
3 changed files with 16 additions and 5 deletions
+5 -2
View File
@@ -20,7 +20,10 @@ export function TimezoneSelector({ value, onChange }: TimezoneSelectProps) {
return { zones, browserTz, getTimezoneOffset }; return { zones, browserTz, getTimezoneOffset };
}, []); }, []);
const selectedOffset = getTimezoneOffset(value); const effectiveTimezone = value
? resolveTimezone(value)
: timezoneList.browserTz;
const selectedOffset = getTimezoneOffset(effectiveTimezone);
const handleOpen = (event: MouseEvent<HTMLElement>) => { const handleOpen = (event: MouseEvent<HTMLElement>) => {
setAnchorEl(event.currentTarget); setAnchorEl(event.currentTarget);
@@ -68,7 +71,7 @@ export function TimezoneSelector({ value, onChange }: TimezoneSelectProps) {
}} }}
> >
<TimezoneAutocomplete <TimezoneAutocomplete
value={value} value={effectiveTimezone}
onChange={onChange} onChange={onChange}
zones={timezoneList.zones} zones={timezoneList.zones}
getTimezoneOffset={getTimezoneOffset} getTimezoneOffset={getTimezoneOffset}
@@ -105,4 +105,3 @@ export function TimezoneAutocomplete({
/> />
); );
} }
+11 -2
View File
@@ -186,7 +186,9 @@ function EventPopover({
const [eventClass, setEventClass] = useState(event?.class ?? "PUBLIC"); const [eventClass, setEventClass] = useState(event?.class ?? "PUBLIC");
const [busy, setBusy] = useState(event?.transp ?? "OPAQUE"); const [busy, setBusy] = useState(event?.transp ?? "OPAQUE");
const [timezone, setTimezone] = useState( const [timezone, setTimezone] = useState(
event?.timezone ? resolveTimezone(event.timezone) : calendarTimezone event?.timezone
? resolveTimezone(event.timezone)
: resolveTimezone(calendarTimezone)
); );
const [hasVideoConference, setHasVideoConference] = useState( const [hasVideoConference, setHasVideoConference] = useState(
event?.x_openpass_videoconference ? true : false event?.x_openpass_videoconference ? true : false
@@ -204,6 +206,13 @@ function EventPopover({
userPersonnalCalendarsRef.current = userPersonnalCalendars; userPersonnalCalendarsRef.current = userPersonnalCalendars;
}, [userPersonnalCalendars]); }, [userPersonnalCalendars]);
// Sync timezone with Redux when modal opens or timezone changes
useEffect(() => {
if (open && !event?.timezone && calendarTimezone) {
setTimezone(resolveTimezone(calendarTimezone));
}
}, [open, calendarTimezone, event?.timezone]);
const resetAllStateToDefault = useCallback(() => { const resetAllStateToDefault = useCallback(() => {
setShowMore(false); setShowMore(false);
setShowDescription(false); setShowDescription(false);
@@ -220,7 +229,7 @@ function EventPopover({
setAlarm(""); setAlarm("");
setEventClass("PUBLIC"); setEventClass("PUBLIC");
setBusy("OPAQUE"); setBusy("OPAQUE");
setTimezone(calendarTimezone); setTimezone(resolveTimezone(calendarTimezone));
setHasVideoConference(false); setHasVideoConference(false);
setMeetingLink(null); setMeetingLink(null);
}, [calendarTimezone]); }, [calendarTimezone]);