/
viktorphp
/
front-socket
Обзор
Документация
Войти
/
viktorphp
/
front-socket
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/widgets/familyTree/lib/buildTreeLayout.ts
47 строк
1 KB
Иванов Виктор Евгеньевич
[feat-tree]: добавить страницу дерева предков, поправить основные баги
13 апр 2026, 21:32
13 апр 2026, 21:32
6a6f509
Код
Авторство
О чём код?
import { Edge, Node } from '@xyflow/react'; import dagre from '@dagrejs/dagre'; const NODE_WIDTH = 200; const NODE_HEIGHT = 120; /** * Расставляет позиции узлов через dagre. * Направление: TB (top-to-bottom) — предки сверху, дети снизу. */ export const buildTreeLayout = <T extends Record<string, unknown>>( nodes: Node<T>[], edges: Edge[] ): Node<T>[] => { const g = new dagre.graphlib.Graph(); g.setDefaultEdgeLabel(() => ({})); g.setGraph({ rankdir: 'TB', nodesep: 60, ranksep: 100, marginx: 40, marginy: 40, }); nodes.forEach((node) => { g.setNode(node.id, { width: NODE_WIDTH, height: NODE_HEIGHT }); }); edges.forEach((edge) => { // Dagre не умеет в undirected — sibling-рёбра добавляем но не влияем на ranker g.setEdge(edge.source, edge.target); }); dagre.layout(g); return nodes.map((node) => { const { x, y } = g.node(node.id); return { ...node, position: { x: x - NODE_WIDTH / 2, y: y - NODE_HEIGHT / 2, }, }; }); };