diff --git a/packages/frontend/src/components/create-sprint.tsx b/packages/frontend/src/components/create-sprint.tsx index b17ebe4..885e9bd 100644 --- a/packages/frontend/src/components/create-sprint.tsx +++ b/packages/frontend/src/components/create-sprint.tsx @@ -49,10 +49,12 @@ const getDefaultDates = () => { export function CreateSprint({ projectId, + sprints, trigger, completeAction, }: { projectId?: number; + sprints: SprintRecord[]; trigger?: React.ReactNode; completeAction?: (sprint: SprintRecord) => void | Promise; }) { @@ -203,6 +205,7 @@ export function CreateSprint({ setStartDate(getStartOfDay(value)); }} autoFocus + sprints={sprints} /> @@ -225,6 +228,8 @@ export function CreateSprint({ setEndDate(getEndOfDay(value)); }} autoFocus + sprints={sprints} + isEnd /> diff --git a/packages/frontend/src/components/organisations-dialog.tsx b/packages/frontend/src/components/organisations-dialog.tsx index e7f40f8..f7c4629 100644 --- a/packages/frontend/src/components/organisations-dialog.tsx +++ b/packages/frontend/src/components/organisations-dialog.tsx @@ -682,6 +682,7 @@ function OrganisationsDialog({ } + sprints={sprints} /> )} diff --git a/packages/frontend/src/components/ui/calendar.tsx b/packages/frontend/src/components/ui/calendar.tsx index 78118e6..1390bcc 100644 --- a/packages/frontend/src/components/ui/calendar.tsx +++ b/packages/frontend/src/components/ui/calendar.tsx @@ -1,3 +1,4 @@ +import type { SprintRecord } from "@sprint/shared"; import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from "lucide-react"; import * as React from "react"; import { type DayButton, DayPicker, getDefaultClassNames } from "react-day-picker"; @@ -12,9 +13,13 @@ function Calendar({ buttonVariant = "ghost", formatters, components, + sprints, + isEnd, ...props }: React.ComponentProps & { buttonVariant?: React.ComponentProps["variant"]; + sprints?: SprintRecord[]; + isEnd?: boolean; }) { const defaultClassNames = getDefaultClassNames(); @@ -113,7 +118,7 @@ function Calendar({ return ; }, - DayButton: CalendarDayButton, + DayButton: (props) => , WeekNumber: ({ children, ...props }) => { return ( @@ -130,7 +135,16 @@ function Calendar({ ); } -function CalendarDayButton({ className, day, modifiers, ...props }: React.ComponentProps) { +function CalendarDayButton({ + className, + day, + modifiers, + sprints, + style, + disabled, + isEnd, + ...props +}: React.ComponentProps & { sprints?: SprintRecord[]; isEnd?: boolean }) { const defaultClassNames = getDefaultClassNames(); const ref = React.useRef(null); @@ -138,6 +152,16 @@ function CalendarDayButton({ className, day, modifiers, ...props }: React.Compon if (modifiers.focused) ref.current?.focus(); }, [modifiers.focused]); + let isDisabled = false; + let sprint: SprintRecord | null = null; + + for (const entry of sprints || []) { + if (day.date >= new Date(entry.startDate) && day.date <= new Date(entry.endDate)) { + isDisabled = true; + sprint = entry; + } + } + return (