import GanttElasticContext from "@/GanttElasticContext"; import _ from "lodash"; import React, { useContext, useEffect, useMemo, useRef } from "react"; import Calendar from "./Calendar/Calendar"; import DaysHighlight from "./DaysHighlight"; import DependencyLines from "./DependencyLines"; import Grid from "./Grid"; import Milestone from "./Row/Milestone"; import Project from "./Row/Project"; import Task from "./Row/Task"; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ChartProps {} const Chart: React.FC = () => { const { style, visibleTasks, refs, calendar, clientHeight, chartWidth, rowsHeight, allVisibleTasksHeight, options } = useContext(GanttElasticContext); const chartRef = useRef(null); const chartCalendarContainerRef = useRef(null); const chartGraphContainerRef = useRef(null); const chartGraphRef = useRef(null); const chartGraphSvgRef = useRef(null); useEffect(() => { refs.chart = chartRef; refs.chartCalendarContainer = chartCalendarContainerRef; refs.chartGraphContainer = chartGraphContainerRef; refs.chartGraph = chartGraphRef; refs.chartGraphSvg = chartGraphSvgRef; }, [refs]); const renderTasks = useMemo(() => { return ( {_.map(visibleTasks, task => { return ( {task.type === "task" && } {task.type === "project" && } {task.type === "milestone" && } ); })} ); }, [style, chartWidth, allVisibleTasksHeight, visibleTasks]); return useMemo( () => (
{renderTasks}
), [ calendar.height, clientHeight, options.calendar.gap, renderTasks, rowsHeight, style, chartWidth ] ); }; export default Chart;