diff --git a/frontend/app/admin/availability/page.tsx b/frontend/app/admin/availability/page.tsx index 998b0a6..1fe46ce 100644 --- a/frontend/app/admin/availability/page.tsx +++ b/frontend/app/admin/availability/page.tsx @@ -8,26 +8,14 @@ import { Header } from "../../components/Header"; import { useRequireAuth } from "../../hooks/useRequireAuth"; import { components } from "../../generated/api"; import constants from "../../../../shared/constants.json"; -import { formatDate, formatDisplayDate } from "../../utils/date"; +import { formatDate, formatDisplayDate, getDateRange } from "../../utils/date"; -const { slotDurationMinutes, maxAdvanceDays } = constants.booking; +const { slotDurationMinutes, maxAdvanceDays, minAdvanceDays } = constants.booking; type AvailabilityDay = components["schemas"]["AvailabilityDay"]; type AvailabilityResponse = components["schemas"]["AvailabilityResponse"]; type TimeSlot = components["schemas"]["TimeSlot"]; -// Helper to get next N days starting from tomorrow -function getDateRange(): Date[] { - const dates: Date[] = []; - const today = new Date(); - for (let i = 1; i <= maxAdvanceDays; i++) { - const d = new Date(today); - d.setDate(today.getDate() + i); - dates.push(d); - } - return dates; -} - // Generate time options for dropdowns (15-min intervals) // Moved outside component since slotDurationMinutes is a constant function generateTimeOptions(slotDurationMinutes: number): string[] { @@ -64,10 +52,10 @@ export default function AdminAvailabilityPage() { const [copyTargets, setCopyTargets] = useState>(new Set()); const [isCopying, setIsCopying] = useState(false); - const dates = getDateRange(); + const dates = getDateRange(minAdvanceDays, maxAdvanceDays); const fetchAvailability = useCallback(async () => { - const dateRange = getDateRange(); + const dateRange = getDateRange(minAdvanceDays, maxAdvanceDays); if (!dateRange.length) return; try { diff --git a/frontend/app/booking/page.tsx b/frontend/app/booking/page.tsx index a387dce..4bfc129 100644 --- a/frontend/app/booking/page.tsx +++ b/frontend/app/booking/page.tsx @@ -8,7 +8,7 @@ import { Header } from "../components/Header"; import { useRequireAuth } from "../hooks/useRequireAuth"; import { components } from "../generated/api"; import constants from "../../../shared/constants.json"; -import { formatDate, formatTime } from "../utils/date"; +import { formatDate, formatTime, getDateRange } from "../utils/date"; const { slotDurationMinutes, maxAdvanceDays, minAdvanceDays, noteMaxLength } = constants.booking; @@ -16,18 +16,6 @@ type BookableSlot = components["schemas"]["BookableSlot"]; type AvailableSlotsResponse = components["schemas"]["AvailableSlotsResponse"]; type AppointmentResponse = components["schemas"]["AppointmentResponse"]; -// Get date range for booking (tomorrow to +30 days) -function getBookableDates(): Date[] { - const dates: Date[] = []; - const today = new Date(); - for (let i = minAdvanceDays; i <= maxAdvanceDays; i++) { - const d = new Date(today); - d.setDate(today.getDate() + i); - dates.push(d); - } - return dates; -} - const styles: Record = { main: { minHeight: "100vh", @@ -244,7 +232,7 @@ export default function BookingPage() { const [error, setError] = useState(null); const [successMessage, setSuccessMessage] = useState(null); - const dates = getBookableDates(); + const dates = getDateRange(minAdvanceDays, maxAdvanceDays); const fetchSlots = useCallback(async (date: Date) => { setIsLoadingSlots(true); diff --git a/frontend/app/utils/date.ts b/frontend/app/utils/date.ts index 729475c..e314893 100644 --- a/frontend/app/utils/date.ts +++ b/frontend/app/utils/date.ts @@ -46,3 +46,18 @@ export function formatDisplayDate(d: Date): string { return d.toLocaleDateString("en-US", { weekday: "short", month: "short", day: "numeric" }); } +/** + * Get date range for booking/availability (from minAdvanceDays to maxAdvanceDays). + * Returns an array of Date objects starting from minAdvanceDays days from today. + */ +export function getDateRange(minAdvanceDays: number, maxAdvanceDays: number): Date[] { + const dates: Date[] = []; + const today = new Date(); + for (let i = minAdvanceDays; i <= maxAdvanceDays; i++) { + const d = new Date(today); + d.setDate(today.getDate() + i); + dates.push(d); + } + return dates; +} +