import React, { useRef, useEffect, SyntheticEvent, 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; onScroll: (event: SyntheticEvent) => void; }; export const TaskGantt: React.FC = ({ gridProps, calendarProps, barProps, ganttHeight, scrollY, scrollX, onScroll, }) => { const ganttSVGRef = useRef(null); const horizontalContainerRef = useRef(null); const verticalContainerRef = 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 (verticalContainerRef.current) { verticalContainerRef.current.scrollLeft = scrollX; setDisplayXStartEndpoint({ start: scrollX, end: verticalContainerRef.current.clientWidth + scrollX, }); } // verticalContainerRef.current?.clientWidth need for resize window tracking }, [scrollX, verticalContainerRef.current?.clientWidth]); return (
); };