feat: node creation and serialization logic in workflow editor

This commit is contained in:
alam00000
2026-02-26 20:28:16 +05:30
parent 88260c26ab
commit 85d90c3382
5 changed files with 230 additions and 174 deletions

View File

@@ -2,7 +2,11 @@ import { showAlert } from '../ui.js';
import { tesseractLanguages } from '../config/tesseract-languages.js';
import { createWorkflowEditor, updateNodeDisplay } from '../workflow/editor';
import { executeWorkflow } from '../workflow/engine';
import { nodeRegistry, getNodesByCategory } from '../workflow/nodes/registry';
import {
nodeRegistry,
getNodesByCategory,
createNodeByType,
} from '../workflow/nodes/registry';
import type { BaseWorkflowNode } from '../workflow/nodes/base-node';
import type { WorkflowEditor } from '../workflow/editor';
import {
@@ -43,6 +47,7 @@ import {
let workflowEditor: WorkflowEditor | null = null;
let selectedNodeId: string | null = null;
let deleteNodeHandler: EventListener | null = null;
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initializePage);
@@ -245,10 +250,14 @@ async function initializePage() {
}
});
document.addEventListener('wf-delete-node', ((e: CustomEvent) => {
if (deleteNodeHandler) {
document.removeEventListener('wf-delete-node', deleteNodeHandler);
}
deleteNodeHandler = ((e: CustomEvent) => {
const nodeId = e.detail?.nodeId;
if (nodeId) deleteNodeById(nodeId);
}) as EventListener);
}) as EventListener;
document.addEventListener('wf-delete-node', deleteNodeHandler);
}
async function deleteNodeById(nodeId: string) {
@@ -539,14 +548,12 @@ async function addNodeToCanvas(
if (!workflowEditor) return;
const { editor, area } = workflowEditor;
const entry = nodeRegistry[type];
if (!entry) {
console.error('Node type not found in registry:', type);
return;
}
try {
const node = entry.factory();
const node = createNodeByType(type);
if (!node) {
console.error('Node type not found in registry:', type);
return;
}
await editor.addNode(node);
const pos = position || getCanvasCenter(area);