OrchestrationDesigner
비주얼 워크플로우 편집기 컴포넌트
개요
OrchestrationDesigner는 노드와 커넥터를 사용해 워크플로우, 프로세스 흐름, 조직도 등을 시각적으로 설계할 수 있는 다이어그램 편집기입니다.
주요 특징
- ✅ 노드/커넥터 CRUD: ref API(
addNode,removeNode,addConnector등)로 외부에서 제어 - ✅ 팔레트: 드래그앤드롭 또는 클릭으로 노드 추가
- ✅ 직교 라우팅: Dijkstra 기반 장애물 회피 커넥터 자동 경로 탐색
- ✅ 인터랙션 제어:
selectable,movable,resizable,connectable,reconnectable독립 토글 - ✅ 커스텀 노드 템플릿:
nodeTemplateprop으로 노드 외형 자유 정의 - ✅ 포트 연결/재연결: 노드 호버 시 포트 표시, 드래그로 연결 생성 및 재연결
- ✅ 줌/팬: 마우스 휠 줌, 패닝 모드 전환
- ✅ Undo/Redo: 내장 히스토리 관리
기본 사용
노드와 커넥터만으로 읽기 전용 다이어그램을 렌더링합니다.
Preview
시작
데이터 처리
Action parameters 0
승인?
종료
인터랙티브 편집
팔레트에서 드래그앤드롭 또는 클릭으로 노드를 추가하고, 포트를 드래그해 커넥터를 연결합니다.
Preview
Start
Process
Decision
End
시작
데이터 처리
Action parameters 0
커스텀 노드 템플릿
nodeTemplate prop으로 노드 렌더링을 완전히 커스터마이즈할 수 있습니다.
Preview
시작
데이터 처리Process
승인?
종료
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
initialNodes | DesignerNode[] | [] | 초기 노드 목록 |
initialConnectors | DesignerConnector[] | [] | 초기 커넥터 목록 |
initialViewport | Viewport | - | 초기 뷰포트 (x, y, zoom) |
nodeGroups | NodeTypeGroup[] | - | 팔레트 노드 유형 그룹 |
showPalette | boolean | true | 팔레트 표시 여부 |
paletteWidth | number | 240 | 팔레트 너비 (px) |
paletteColumns | number | 3 | 팔레트 그리드 열 수 |
showToolbar | boolean | true | 툴바 표시 여부 |
toolbarButtons | DesignerToolbarButton[] | - | 툴바 버튼 목록 (완전 외부 제어) |
showGrid | boolean | true | 캔버스 그리드 표시 |
gridSize | number | 20 | 그리드 크기 (px) |
snapToGrid | boolean | false | 노드 이동/드롭 시 그리드 스냅 |
nodeTemplate | (node: DesignerNode) => ReactNode | - | 커스텀 노드 렌더러 |
renderConnector | (connector: DesignerConnector) => ReactNode | - | 커스텀 커넥터 렌더러 |
nodeActions | NodeAction[] | [] | 노드 선택 시 표시할 액션 버튼 |
selectable | boolean | false | 노드/커넥터 클릭 선택 허용 |
movable | boolean | false | 노드 드래그 이동 허용 |
resizable | boolean | false | 노드 리사이즈 허용 |
connectable | boolean | false | 포트 드래그로 새 커넥터 생성 허용 |
reconnectable | boolean | false | 커넥터 엔드포인트 재연결 허용 |
panMode | boolean | false | 좌클릭 드래그로 캔버스 패닝 |
visible | boolean | true | 표시 여부 |
Events
| Event | Type | Description |
|---|---|---|
onPaletteNodeClick | (item: NodeTypeItem) => void | 팔레트 노드 클릭 시 |
onNodeDrop | (type: string, position: Position) => DesignerNode | void | 캔버스에 DnD 드롭 — 노드 반환 시 자동 추가 |
onChange | (nodes: DesignerNode[], connectors: DesignerConnector[]) => void | 상태 변경 콜백 |
Ref API (OrchestrationDesignerRef)
| Method | Type | Description |
|---|---|---|
addNode | (node: DesignerNode) => void | 노드 추가 |
removeNode | (nodeId: string) => void | 노드 제거 |
updateNode | (nodeId: string, updates: Partial<DesignerNode>) => void | 노드 속성 업데이트 |
addConnector | (connector: DesignerConnector) => void | 커넥터 추가 |
removeConnector | (connectorId: string) => void | 커넥터 제거 |
undo | () => void | 실행 취소 |
redo | () => void | 다시 실행 |
zoomToFit | () => void | 전체 노드에 맞춰 줌 |
autoLayout | () => void | 자동 레이아웃 정렬 |
주요 타입
DesignerNode
interface DesignerNode {
id: string
type: string
title: string
position: Position
size?: Size
color?: string
shape?: "rect" | "diamond" | "circle"
status?: NodeStatus
locked?: boolean
connectionPoints?: ConnectionPoint[]
data?: Record<string, unknown>
}DesignerConnector
interface DesignerConnector {
id: string
sourceNodeId: string
targetNodeId: string
sourcePointId?: string
targetPointId?: string
label?: string
color?: string
}NodeTypeGroup
interface NodeTypeGroup {
id: string
label: string
color?: string
items: NodeTypeItem[]
}접근성
권장 사항
- ✅ 노드 선택 시 액션 바가 표시되어 키보드 접근 가능합니다.
- ✅ Delete/Backspace 키로 선택된 노드/커넥터를 삭제할 수 있습니다.
- ✅ 마우스 휠로 줌 조절이 가능합니다.
- ❌ 현재 포트 연결은 마우스 드래그 전용입니다. 키보드만으로 커넥터를 생성할 수 없습니다.
관련 컴포넌트
- Kanban: 컬럼 기반 카드 보드 컴포넌트
Last updated on