diff --git a/src/components/organisms/GanttChart.tsx b/src/components/organisms/GanttChart.tsx index 30d29d4a..d185f261 100644 --- a/src/components/organisms/GanttChart.tsx +++ b/src/components/organisms/GanttChart.tsx @@ -6,10 +6,9 @@ import { differenceInCalendarDays, differenceInCalendarWeeks, format, - subDays, } from 'date-fns' import { times } from 'ramda' -import { useMemo, MouseEventHandler } from 'react' +import React, { useMemo, MouseEventHandler } from 'react' export interface GanttChartItem { id: string @@ -26,6 +25,11 @@ interface GanttChartProps { items: GanttChartItem[] } +const widthOfDay = 20 +const widthOfWeek = widthOfDay * 7 + +const itemHeight = 30 + const GanttChart = ({ startDate: startDateString, endDate: endDateString, @@ -34,8 +38,8 @@ const GanttChart = ({ }: GanttChartProps) => { const startDate = new Date(startDateString) const endDate = new Date(endDateString) - const firstDateToRender = subDays(startDate, startDate.getDay() - 1) - const lastDateToRender = addDays(endDate, 6 - endDate.getDay() + 1) + const firstDateToRender = startDate + const lastDateToRender = endDate const todayDate = new Date(todayDateString) const daysToRender = differenceInCalendarDays( @@ -54,91 +58,55 @@ const GanttChart = ({ }, [items]) return ( - - - {times((index) => { - const weekNumber = index + 1 - return ( - - Week {weekNumber} - - ) - }, weeksToRender)} - + + {times((index) => { return ( - ) - }, daysToRender + 1)} + }, daysToRender)} {times((index) => { - const weekNumber = index + 1 return ( - - {format(addWeeks(firstDateToRender, weekNumber), 'PP')} - + {format(addDays(firstDateToRender, index - 1), 'EEEEE')} + ) - }, weeksToRender - 1)} - - @@ -171,25 +128,11 @@ const GanttChart = ({ transform: 'rotate(90deg)', color: 'red.5', zIndex: 21, - top: 150, + top: 170, left: - differenceInCalendarDays(startDate, firstDateToRender) * 40 + - -160, - width: 300, - pointerEvents: 'none', - }} - > - {format(startDate, 'PP')} - - - - Today ({format(todayDate, 'PP')}) - - {items.map((item) => { const offset = differenceInCalendarDays( new Date(item.duration[0]), firstDateToRender - ) * 40 + ) * + widthOfDay - + widthOfDay / 2 const length = differenceInCalendarDays( new Date(item.duration[1]), new Date(item.duration[0]) - ) * 40 + ) * widthOfDay return ( { + return ( + + {times((index) => { + const weekNumber = index + return ( + + {format(addWeeks(firstDateToRender, weekNumber), 'PP')} + + ) + }, weeksToRender)} + + ) +} + +const DateMeasure = ({ + index, + totalRow, +}: { + index: number + totalRow: number +}) => { + return ( + + ) +} + +const TodayBox = ({ + totalRow, + todayDate, + firstDateToRender, +}: { + totalRow: number + todayDate: Date + firstDateToRender: Date +}) => { + return ( + <> + + Today ({format(todayDate, 'PP')}) + + + + ) +}