import React, { useRef, useEffect, useState } from 'react'; import { Task } from '../../types/public-types'; import '../../style.css'; export type TooltipProps = { x: number; y: number; task: Task; fontSize: string; fontFamily: string; getTooltipContent?: ( task: Task, fontSize: string, fontFamily: string ) => JSX.Element; }; export const Tooltip: React.FC = ({ x, y, task, fontSize, fontFamily, getTooltipContent = getStandardTooltipContent, }) => { const tooltipRef = useRef(null); const [toolWidth, setToolWidth] = useState(1000); const [relatedY, setRelatedY] = useState(y); useEffect(() => { if (tooltipRef.current) { const height = tooltipRef.current.offsetHeight + tooltipRef.current.offsetHeight * 0.15; setRelatedY(y - height); setToolWidth(tooltipRef.current.scrollWidth * 1.1); } }, [tooltipRef, y]); return (
{getTooltipContent(task, fontSize, fontFamily)}
); }; const getStandardTooltipContent = ( task: Task, fontSize: string, fontFamily: string ) => { const style = { fontSize, fontFamily, }; return (
{`${ task.name }: ${task.start.getDate()}-${task.start.getMonth() + 1}-${task.start.getFullYear()} - ${task.end.getDate()}-${task.end.getMonth() + 1}-${task.end.getFullYear()}`}

{`Duration: ${~~( (task.end.getTime() - task.start.getTime()) / (1000 * 60 * 60 * 24) )} day(s)`}

{`Progress: ${task.progress} %`}

); };