From 0487a843f10f40b9a26c9895726ac736889930eb Mon Sep 17 00:00:00 2001 From: Sakura Knoll Date: Tue, 28 Dec 2021 03:37:11 +0900 Subject: [PATCH] Improve gantt chart style --- src/components/organisms/GanttChart.tsx | 109 ++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 9 deletions(-) diff --git a/src/components/organisms/GanttChart.tsx b/src/components/organisms/GanttChart.tsx index 50bf2e1f..5753adf9 100644 --- a/src/components/organisms/GanttChart.tsx +++ b/src/components/organisms/GanttChart.tsx @@ -1,8 +1,11 @@ import { Box, Flex, Text } from '@theme-ui/components' import { + addDays, + addWeeks, differenceInCalendarDays, differenceInCalendarWeeks, format, + subDays, } from 'date-fns' import { times } from 'ramda' import { useMemo, MouseEventHandler } from 'react' @@ -30,10 +33,18 @@ const GanttChart = ({ }: GanttChartProps) => { const startDate = new Date(startDateString) const endDate = new Date(endDateString) + const firstDateToRender = subDays(startDate, startDate.getDay()) + const lastDateToRender = addDays(endDate, 6 - endDate.getDay()) const todayDate = new Date(todayDateString) - const totalDays = differenceInCalendarDays(endDate, startDate) - const totalWeeks = differenceInCalendarWeeks(endDate, startDate) + const daysToRender = differenceInCalendarDays( + lastDateToRender, + firstDateToRender + ) + const weeksToRender = differenceInCalendarWeeks( + lastDateToRender, + firstDateToRender + ) const totalRow = useMemo(() => { return items.reduce((max, item) => { @@ -42,7 +53,7 @@ const GanttChart = ({ }, []) return ( - + ) - }, totalWeeks)} + }, weeksToRender)} ) - }, totalDays)} + }, daysToRender)} + + {times((index) => { + const weekNumber = index + 1 + return ( + + {format(addWeeks(firstDateToRender, weekNumber), 'PP')} + + ) + }, weeksToRender)} + + + + {format(startDate, 'PP')} + + + {format(endDate, 'PP')} + + - Today ({format(todayDate, 'P')}) + Today ({format(todayDate, 'PP')}) {items.map((item) => { const offset = - differenceInCalendarDays(new Date(item.duration[0]), startDate) * 40 + differenceInCalendarDays( + new Date(item.duration[0]), + firstDateToRender + ) * 40 const length = differenceInCalendarDays( new Date(item.duration[1]),