v0.11.6 added event form rules.

This commit is contained in:
2026-03-21 11:07:22 -04:00
parent 60df2cf97e
commit 82a521f12c
6 changed files with 39 additions and 28 deletions

View File

@@ -226,6 +226,7 @@ export default function MobileEventForm({ event, eventTypes, userGroups, selecte
: null;
// Track previous typeId so we can detect a type change vs start time change
const prevTypeIdRef = useRef(event?.event_type_id ? String(event.event_type_id) : '');
const mountedRef = useRef(false);
const [allDay, setAllDay] = useState(!!event?.all_day);
const [track, setTrack] = useState(!!event?.track_availability);
const [isPrivate, setIsPrivate] = useState(event ? !event.is_public : false);
@@ -262,13 +263,13 @@ export default function MobileEventForm({ event, eventTypes, userGroups, selecte
finally { setSavingType(false); }
};
// Auto-calculate end date/time when start date, start time, or event type changes.
// Rules:
// - New event: use eventType duration (default 1hr)
// - Editing + type changed: use new eventType duration
// - Editing + type same: use saved event duration (preserve original length)
// - Always: if end < start, advance end date by 1 day (overnight events)
// Mark mounted after first render
useEffect(() => { mountedRef.current = true; }, []);
// Auto-calculate end date/time ONLY when start date, start time, or type actually changes.
// Skips initial mount so edit mode fields are never overwritten on open.
useEffect(() => {
if(!mountedRef.current) return; // skip initial mount — never auto-change on open
if(!sd||!st) return;
const start = buildISO(sd,st);
if(!start) return;
@@ -278,11 +279,11 @@ export default function MobileEventForm({ event, eventTypes, userGroups, selecte
let durMins;
if(!event || typeChanged) {
// New event or type change: use eventType duration
// New event or explicit type change: use eventType duration
const typ = localTypes.find(t=>t.id===Number(typeId));
durMins = (typ?.default_duration_hrs||1) * 60;
} else {
// Editing with same type: preserve the saved event duration
// Editing start date/time with same type: preserve saved duration
durMins = savedDurMins || 60;
}