Skip to content

Commit 5aca7b6

Browse files
Refine full-day date range defaults
1 parent 7f951d3 commit 5aca7b6

2 files changed

Lines changed: 27 additions & 27 deletions

File tree

src/components/create-event-form.test.tsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -285,17 +285,18 @@ describe("CreateEventForm", () => {
285285
global.fetch = fetchMock as typeof fetch;
286286

287287
renderCreateEventForm();
288-
vi.useRealTimers();
289-
const user = userEvent.setup();
290288

291-
await user.type(screen.getByLabelText("Event title"), "Offsite days");
292-
await user.click(screen.getByRole("radio", { name: /Full days/i }));
289+
fireEvent.change(screen.getByLabelText("Event title"), {
290+
target: { value: "Offsite days" },
291+
});
292+
fireEvent.click(screen.getByRole("radio", { name: /Full days/i }));
293293

294294
expect(screen.queryByRole("combobox", { name: "Daily start" })).not.toBeInTheDocument();
295295
expect(screen.queryByRole("combobox", { name: "Slot size" })).not.toBeInTheDocument();
296296
expect(screen.getAllByText("Apr 2, 2026 - May 2, 2026").length).toBeGreaterThan(0);
297297

298-
await user.click(screen.getByRole("button", { name: "Create event" }));
298+
vi.useRealTimers();
299+
fireEvent.click(screen.getByRole("button", { name: "Create event" }));
299300

300301
await waitFor(() => {
301302
expect(fetchMock).toHaveBeenCalledTimes(1);
@@ -312,6 +313,19 @@ describe("CreateEventForm", () => {
312313
expect(payload.dates[payload.dates.length - 1]).toBe("2026-05-01");
313314
});
314315

316+
it("uses the current day when switching a still-default range to full-day after midnight", async () => {
317+
vi.useFakeTimers();
318+
vi.setSystemTime(new Date("2026-04-02T10:00:00.000Z"));
319+
320+
renderCreateEventForm();
321+
322+
vi.setSystemTime(new Date("2026-04-03T00:30:00.000Z"));
323+
324+
fireEvent.click(screen.getByRole("radio", { name: /Full days/i }));
325+
326+
expect(screen.getAllByText("Apr 3, 2026 - May 3, 2026").length).toBeGreaterThan(0);
327+
});
328+
315329
it("submits the optional notification email when alerts are available", async () => {
316330
const user = userEvent.setup();
317331
const fetchMock = vi.fn().mockResolvedValue({

src/components/create-event-form.tsx

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
import { meetingDurationOptions, slotMinuteOptions } from "@/lib/constants";
3737
import { useI18n } from "@/lib/i18n/context";
3838
import { buildTimezoneOptions } from "@/lib/timezone-options";
39+
import type { EventType } from "@/lib/types";
3940
import { cn } from "@/lib/utils";
4041
import { createEventCreateSchema } from "@/lib/validators";
4142

@@ -63,7 +64,6 @@ const eventFieldOrder = [
6364

6465
type EventField = (typeof eventFieldOrder)[number];
6566
type EventFormErrors = Partial<Record<EventField, string>>;
66-
type EventType = "time_grid" | "full_day";
6767

6868
const eventFieldIds: Record<EventField, string> = {
6969
eventType: "event-type",
@@ -109,17 +109,6 @@ function getDefaultDateRange(eventType: EventType, today: Date): DateRange {
109109
};
110110
}
111111

112-
function dateRangeMatchesByDay(left: DateRange | undefined, right: DateRange) {
113-
if (!left?.from || !left?.to || !right.from || !right.to) {
114-
return false;
115-
}
116-
117-
return (
118-
format(left.from, "yyyy-MM-dd") === format(right.from, "yyyy-MM-dd") &&
119-
format(left.to, "yyyy-MM-dd") === format(right.to, "yyyy-MM-dd")
120-
);
121-
}
122-
123112
function sortWeekdays(values: number[]) {
124113
return [...values].sort(
125114
(left, right) =>
@@ -198,16 +187,13 @@ export function CreateEventForm({
198187
const [errorMessage, setErrorMessage] = useState<string | null>(null);
199188
const [fieldErrors, setFieldErrors] = useState<EventFormErrors>({});
200189
const [isRangePickerOpen, setIsRangePickerOpen] = useState(false);
201-
const [defaultDateRangeStart] = useState(() => startOfToday());
190+
const [initialDateRange] = useState(() => getDefaultDateRange("time_grid", startOfToday()));
202191
const [eventType, setEventType] = useState<EventType>("time_grid");
203192
const [title, setTitle] = useState("");
204193
const [notificationEmail, setNotificationEmail] = useState("");
205-
const [dateRange, setDateRange] = useState<DateRange | undefined>(() =>
206-
getDefaultDateRange("time_grid", defaultDateRangeStart),
207-
);
208-
const [draftDateRange, setDraftDateRange] = useState<DateRange | undefined>(() =>
209-
getDefaultDateRange("time_grid", defaultDateRangeStart),
210-
);
194+
const [dateRange, setDateRange] = useState<DateRange | undefined>(initialDateRange);
195+
const [draftDateRange, setDraftDateRange] = useState<DateRange | undefined>(initialDateRange);
196+
const [usesDefaultDateRange, setUsesDefaultDateRange] = useState(true);
211197
const [timezone, setTimezone] = useState(() => {
212198
const browserTimezone =
213199
typeof window !== "undefined"
@@ -329,6 +315,7 @@ export function CreateEventForm({
329315
}
330316

331317
setDateRange(draftDateRange);
318+
setUsesDefaultDateRange(false);
332319
clearErrors("dates");
333320
setIsRangePickerOpen(false);
334321
}
@@ -345,9 +332,8 @@ export function CreateEventForm({
345332
}
346333

347334
function selectEventType(nextEventType: EventType) {
348-
const currentDefaultRange = getDefaultDateRange(eventType, defaultDateRangeStart);
349-
if (dateRangeMatchesByDay(dateRange, currentDefaultRange)) {
350-
const nextDefaultRange = getDefaultDateRange(nextEventType, defaultDateRangeStart);
335+
if (usesDefaultDateRange) {
336+
const nextDefaultRange = getDefaultDateRange(nextEventType, startOfToday());
351337
setDateRange(nextDefaultRange);
352338
setDraftDateRange(nextDefaultRange);
353339
clearErrors("dates", "weekdays");

0 commit comments

Comments
 (0)