@hadyfayed/filament-workflow-canvas
Version:
Visual workflow builder and canvas component for Filament applications
79 lines (68 loc) • 2.58 kB
text/typescript
/**
* Workflow Manager Interface - defines contract for workflow management
* Following Interface Segregation Principle
*/
import { Node, Edge, Viewport } from 'reactflow';
export interface WorkflowNode {
id: string;
type: string;
name: string;
description?: string;
config?: Record<string, any>;
position: { x: number; y: number };
is_enabled: boolean;
}
export interface WorkflowConnection {
source_node_id: string;
target_node_id: string;
conditions: Record<string, any>;
}
export interface WorkflowData {
nodes: WorkflowNode[];
connections: WorkflowConnection[];
viewport: { x: number; y: number; zoom: number };
}
export interface IWorkflowManager {
saveWorkflow(nodes: Node[], edges: Edge[], viewport: Viewport): Promise<WorkflowData>;
loadWorkflow(data: WorkflowData): { nodes: Node[]; edges: Edge[] };
validateWorkflow(nodes: Node[], edges: Edge[]): boolean;
exportWorkflow(data: WorkflowData, format: 'json' | 'yaml'): string;
}
export interface INodeManager {
setNodeIdCounter(arg0: number): unknown;
createNode(type: string, position?: { x: number; y: number }): Node;
validateNode(node: Node): boolean;
getNodePosition(nodeType: string, existingNodes: Node[]): { x: number; y: number };
duplicateNode(node: Node): Node;
}
export interface IConnectionManager {
validateConnection(sourceType: string, targetType: string): boolean;
createConnection(source: string, target: string): Edge;
getValidTargets(sourceType: string): string[];
getConnectionRules(): Record<string, string[]>;
}
export interface IViewportManager {
fitView(instance: any, options?: any): void;
zoomIn(instance: any): void;
zoomOut(instance: any): void;
updateViewport(viewport: Viewport): void;
}
export interface IWorkflowPersistence {
save(key: string, data: WorkflowData): Promise<void>;
load(key: string): Promise<WorkflowData | null>;
remove(key: string): Promise<void>;
clear(): Promise<void>;
}
export interface IWorkflowEventSystem {
emitNodeAdded(newNode: Node): unknown;
emitWorkflowSaved(workflowData: WorkflowData): unknown;
emitNodeUpdated(updatedNode: Node): unknown;
emitNodeDeleted(nodeId: string): unknown;
emitConnectionCreated(edge: Edge): unknown;
onNodeAdded(callback: (node: Node) => void): void;
onNodeUpdated(callback: (node: Node) => void): void;
onNodeDeleted(callback: (nodeId: string) => void): void;
onConnectionCreated(callback: (edge: Edge) => void): void;
onWorkflowSaved(callback: (data: WorkflowData) => void): void;
emit(event: string, data?: any): void;
}