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(() => { 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); // Ограничиваем количество сообщений до 50 setLog((prevLog) => [...newLog, ...prevLog].slice(0, 50)); }, [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 renderSubHeaders = (items) => { return items.map((item) => { if (item.items) { return item.items.map((child) => (
{child.title}
)); } else { return (
{item.title}
); } }); }; // Функция для отображения данных const renderData = (items) => { return items.map((item) => { if (item.items) { return item.items.map((child) => { if (child.items) { return child.items.map((subChild) => (
{subChild.title}
)); } else { return (
{child.title}
); } }); } else { return (
{item.title}
); } }); }; return (
{renderHeaders(filteredData)}{renderSubHeaders(filteredData)}{renderData(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;