Fix problem with null parent after selecting new graph, add visual showing of active node (for now with heavy solution of re-drawing whole graph)
This commit is contained in:
parent
66ce396b48
commit
c9f6941cd9
|
|
@ -47,6 +47,7 @@ interface BaseNodeWrapperData {
|
|||
nodeId: string;
|
||||
graphId: string;
|
||||
onNodeDelete: (nodeId: string) => Promise<void>;
|
||||
isActive: boolean;
|
||||
app: App;
|
||||
}
|
||||
|
||||
|
|
@ -312,6 +313,7 @@ interface GraphPanelProps {
|
|||
onNodeSelectionChange: (nodeId: string, isSelected: boolean) => void;
|
||||
onNodeDelete: (nodeId: string) => Promise<void>;
|
||||
selectedNodeIds: Set<string>;
|
||||
activeNodeId: string | null;
|
||||
app: App;
|
||||
}
|
||||
|
||||
|
|
@ -326,6 +328,7 @@ export const GraphPanelComponent: React.FC<GraphPanelProps> = ({
|
|||
onNodeSelectionChange,
|
||||
onNodeDelete,
|
||||
selectedNodeIds,
|
||||
activeNodeId,
|
||||
app
|
||||
}) => {
|
||||
// ----------------------------------------------- React Hooks ---------------------------------------------------------------
|
||||
|
|
@ -351,10 +354,13 @@ export const GraphPanelComponent: React.FC<GraphPanelProps> = ({
|
|||
graphId: node.graph_id || 'unknown', // пока не передаём id графа с эндпоинтом для экономии трафика - пока так, иначе бы было что-то типо node.data.message.graph_id
|
||||
nodeId: node.id,
|
||||
app: app,
|
||||
is_placeholder: node.data?.is_placeholder || false // НОВОЕ: Передаем статус placeholder
|
||||
is_placeholder: node.data?.is_placeholder || false, // НОВОЕ: Передаем статус placeholder
|
||||
isActive: node.id === activeNodeId
|
||||
},
|
||||
position: { x: 0, y: 0 },
|
||||
className: selectedNodeIds.has(node.id) ? 'selected-node' : ''
|
||||
className: `${selectedNodeIds.has(node.id) ? 'selected-node' : ''} ${
|
||||
node.id === activeNodeId ? 'active-node' : ''
|
||||
}`
|
||||
}));
|
||||
|
||||
const initialEdgesForLayout = graphData.edges.map((edge) => ({
|
||||
|
|
@ -379,7 +385,7 @@ export const GraphPanelComponent: React.FC<GraphPanelProps> = ({
|
|||
setNodes([]);
|
||||
setEdges([]);
|
||||
}
|
||||
}, [graphData.nodes, graphData.edges, onNodeDelete, selectedNodeIds]); // Зависимости: изменения в узлах и рёбрах графа, колбэк удаления, выделенные узлы
|
||||
}, [graphData.nodes, graphData.edges, onNodeDelete, selectedNodeIds, activeNodeId]); // Зависимости: изменения в узлах и рёбрах графа, колбэк удаления, выделенные узлы
|
||||
|
||||
// ----------------------------------------------- Event Handlers ------------------------------------------------------------
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -834,6 +834,10 @@
|
|||
height: auto !important;
|
||||
}
|
||||
|
||||
.react-flow__node.active-node {
|
||||
border: 2px solid var(--interactive-accent); /* Красная рамка для активного узла */
|
||||
box-shadow: 0 0 8px var(--interactive-accent); /* Небольшая тень для выделения */
|
||||
}
|
||||
|
||||
/* Стиль для выделенных узлов */
|
||||
.react-flow__node.selected-node {
|
||||
|
|
|
|||
|
|
@ -109,12 +109,22 @@ export class ChatView extends ItemView {
|
|||
throw new Error(`Ошибка загрузки сообщений: ${response.status} - ${errorText}`);
|
||||
}
|
||||
const data = await response.json();
|
||||
// ИСПРАВЛЕНО: Убедиться, что type передается, если это возможно
|
||||
|
||||
this.chatHistory =
|
||||
data.map((msg: any) => ({
|
||||
...msg,
|
||||
type: msg.type || msg.role // Используем type, если есть, иначе role как fallback
|
||||
})) || [];
|
||||
|
||||
|
||||
// Уточнение, чтобы после выбора графа мы создавали узлы с не-пустым родителем
|
||||
if (this.chatHistory.length > 0) {
|
||||
// Устанавливаем currentNode на ID последнего сообщения в загруженной истории
|
||||
this.currentNode = this.chatHistory[this.chatHistory.length - 1].node_id;
|
||||
} else {
|
||||
this.currentNode = null; // Если история пуста, current_node_id также null
|
||||
}
|
||||
|
||||
if (this.chatPanel) {
|
||||
await this.chatPanel.updateHistory(this.chatHistory);
|
||||
}
|
||||
|
|
@ -122,6 +132,12 @@ export class ChatView extends ItemView {
|
|||
console.error('Ошибка загрузки сообщений:', error);
|
||||
// Optionally: show a notice to the user
|
||||
// new Notice(`Ошибка загрузки сообщений: ${error.message}`);
|
||||
|
||||
/* Спорно, пока закомментил: this.chatHistory = []; // Очищаем историю при ошибке
|
||||
this.currentNode = null; // Сбрасываем currentNode при ошибке
|
||||
if (this.chatPanel) {
|
||||
await this.chatPanel.updateHistory(this.chatHistory);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -269,6 +269,7 @@ export class GraphView extends ItemView {
|
|||
onNodeSelectionChange: this.handleNodeSelectionChange.bind(this), // Передаем обработчик изменения выделения
|
||||
onNodeDelete: this.handleDeleteNode.bind(this), // Передаем колбэк для удаления одиночного узла
|
||||
selectedNodeIds: this.selectedNodeIds, // Передаем Set выделенных узлов
|
||||
activeNodeId: this.currentNode,
|
||||
app: this.plugin.app
|
||||
})
|
||||
);
|
||||
|
|
@ -406,6 +407,7 @@ export class GraphView extends ItemView {
|
|||
this.selectedNodeIds.clear();
|
||||
}
|
||||
this.plugin.eventBus.emit('node-selected', { nodeId, graphId: this.selectedGraphId });
|
||||
this.renderGraphPanel(); // Временное "жирное" решение с полной перерисовкой графа при каждом выборе узла
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user