import React, { useRef, useEffect, useState } from "react"; import { GridProps, Grid } from "../grid/grid"; import { CalendarProps, Calendar } from "../calendar/calendar"; import { TaskGanttContentProps, TaskGanttContent } from "./task-gantt-content"; import styles from "./gantt.module.css"; export type TaskGanttProps = { gridProps: GridProps; calendarProps: CalendarProps; barProps: TaskGanttContentProps; ganttHeight: number; scrollY: number; scrollX: number; verticalGanttContainerRef: React.RefObject; }; export const TaskGantt: React.FC = ({ gridProps, calendarProps, barProps, ganttHeight, scrollY, scrollX, verticalGanttContainerRef, }) => { const ganttSVGRef = useRef(null); const horizontalContainerRef = useRef(null); const [displayXStartEndpoint, setDisplayXStartEndpoint] = useState({ start: 0, end: 0, }); const newBarProps = { ...barProps, svg: ganttSVGRef, displayXStartEndpoint }; useEffect(() => { if (horizontalContainerRef.current) { horizontalContainerRef.current.scrollTop = scrollY; } }, [scrollY]); useEffect(() => { if (verticalGanttContainerRef.current) { verticalGanttContainerRef.current.scrollLeft = scrollX; setDisplayXStartEndpoint({ start: scrollX, end: verticalGanttContainerRef.current.clientWidth + scrollX, }); } // verticalContainerRef.current?.clientWidth need for resize window tracking }, [scrollX, verticalGanttContainerRef.current?.clientWidth]); return (
); };