trust-module-frontend/src/Components/TreeChart/tabContent.jsx

90 lines
3.0 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import React, { lazy, Suspense } from "react";
const PrometheusChart = lazy(() => import('../../Charts/PrometheusChart'));
import LazyChartBatchRenderer from "../hooks/LazyChartBatchRender";
// Функция для генерации названия метрики на основе id
const getMetricName = (id) => {
return `zvks_apiforsnmp_measure_${id}`;
};
// Функция для рекурсивного сбора всех id потомков
const getAllChildIds = (node) => {
let ids = [];
if (node.id) {
ids.push(node.id); // Добавляем id текущего узла
}
if (node.items && node.items.length > 0) {
node.items.forEach((child) => {
ids = ids.concat(getAllChildIds(child)); // Рекурсивно собираем id потомков
});
}
return ids;
};
const tabContent = (data) => {
const tabContent = {};
// Функция для рекурсивного обхода и сбора данных
const generateContent = (nodes) => {
nodes.forEach((node) => {
// Если у узла есть вложенные элементы, рекурсивно обрабатываем их
if (node.items && node.items.length > 0) {
// Создаем контент для родителя
const childrenContent = generateContent(node.items);
const content = (
<div>
<h2>{node.title}</h2>
<LazyChartBatchRenderer charts={node.items.map((child) => tabContent[child.id].content)} />
<p>Контент для {node.title}.</p>
{childrenContent}
</div>
);
// Сохраняем контент для текущего id
tabContent[node.id] = {
title: node.title,
content: content,
};
} else {
// Если у узла нет вложенных элементов, это самый нижний уровень
const metricName = getMetricName(node.id);
const content = (
<div key={node.id}>
<h3>{node.title}</h3> {/* Используем title узла */}
<Suspense fallback={<div>Загрузка графика...</div>}>
<PrometheusChart metricName={metricName} />
</Suspense>
</div>
);
// Сохраняем контент для текущего id
tabContent[node.id] = {
title: node.title,
content: content,
};
}
});
// Возвращаем контент для всех потомков
return (
<div>
{nodes.map((node) => (
<div key={node.id}>{tabContent[node.id].content}</div>
))}
</div>
);
};
// Начинаем обработку с корневого уровня
if (data.items && data.items.length > 0) {
generateContent(data.items);
} else {
console.warn("Данные отсутствуют или массив items пуст");
}
return tabContent;
};
export default tabContent;