import React, { useEffect, useRef, useState } from "react"; import "../../Style/TreeTable.css"; import { statusManager1, statusManager2 } from "../TreeChart/dataUtils"; const TreeTable = ({ data }) => { const tableRef = useRef(null); const [fontSize, setFontSize] = useState(16); const [log, setLog] = useState([]); const [isLogVisible, setIsLogVisible] = useState(true); const adjustFontSize = () => { if (tableRef.current) { let newSize = 16; const maxWidth = window.innerWidth; while (tableRef.current.scrollWidth > maxWidth && newSize > 10) { newSize -= 1; tableRef.current.style.fontSize = `${newSize}px`; } while (tableRef.current.scrollWidth < maxWidth && newSize < 16) { newSize += 1; tableRef.current.style.fontSize = `${newSize}px`; } setFontSize(newSize); } }; useEffect(() => { adjustFontSize(); window.addEventListener("resize", adjustFontSize); return () => window.removeEventListener("resize", adjustFontSize); }, [data]); useEffect(() => { const newLog = []; const traverse = (items) => { items.forEach((item) => { if (["yellow", "orange", "red"].includes(item.status)) { newLog.push({ title: item.title, status: item.status, time: new Date().toLocaleTimeString() // Добавляем время }); } if (item.items) { traverse(item.items); } }); }; traverse(data.items); setLog(newLog); }, [data]); const filteredData = data.items.filter((item) => item.title !== "Функциональные задачи"); const renderHeaders = (items) => { return items.map((item) => { const colSpan = item.items ? item.items.length : 1; return (
{item.title}
); }); }; const renderRows = (items) => { if (!items || items.length === 0) return null; const hasChildren = items.some((item) => item.items && item.items.length > 0); if (!hasChildren) return null; return ( {items.map((item) => { if (item.items && item.items.length > 0) { return ( {item.items.map((child) => (
{child.title}
))} ); } else { return (
{item.title}
); } })} ); }; return (
{renderHeaders(filteredData)}{renderRows(filteredData)}
acc + (item.items ? item.items.length : 1), 0)} className="tree-table-header" title={data.title} >
{data.title}
{isLogVisible && (

Лог статусов

    {log.map((entry, index) => (
  • [{entry.time}] {entry.status}: {entry.title}
  • ))}
)}
); }; export default TreeTable;