fix: 修复工作流节点交互与旧浏览器兼容
- 修复 Tinyflow Vue wrapper 可选 boolean 默认关闭节点拖拽和连线的问题 - 为 Tinyflow 增加 structuredClone 兼容与 Chrome 90 构建目标 - 增加节点交互归一化与 Tab 空值防御
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { type Edge, type Node, type Viewport } from '@xyflow/svelte';
|
||||
import type { TinyflowNodeNormalizer } from '../utils/nodeInteraction';
|
||||
|
||||
const DEFAULT_VIEWPORT: Viewport = { x: 250, y: 100, zoom: 1 };
|
||||
|
||||
@@ -6,20 +7,27 @@ const createStore = () => {
|
||||
let nodesInternal = $state.raw([] as Node[]);
|
||||
let edgesInternal = $state.raw([] as Edge[]);
|
||||
let viewport = $state.raw({ ...DEFAULT_VIEWPORT } as Viewport);
|
||||
let normalizeNode: TinyflowNodeNormalizer = (node) => node;
|
||||
|
||||
const normalizeNodes = (nodes: Node[]) => nodes.map(normalizeNode);
|
||||
|
||||
return {
|
||||
// nodes: nodesInternal,
|
||||
// edges: edgesInternal,
|
||||
// viewport,
|
||||
setNodeNormalizer: (normalizer: TinyflowNodeNormalizer) => {
|
||||
normalizeNode = normalizer;
|
||||
nodesInternal = normalizeNodes(nodesInternal);
|
||||
},
|
||||
init: (nodes: Node[], edges: Edge[], nextViewport?: Viewport | null) => {
|
||||
nodesInternal = nodes;
|
||||
nodesInternal = normalizeNodes(nodes);
|
||||
edgesInternal = edges;
|
||||
viewport = nextViewport ? { ...nextViewport } : { ...DEFAULT_VIEWPORT };
|
||||
},
|
||||
|
||||
getNodes: () => nodesInternal,
|
||||
setNodes: (nodes: Node[]) => {
|
||||
nodesInternal = nodes;
|
||||
nodesInternal = normalizeNodes(nodes);
|
||||
},
|
||||
getEdges: () => edgesInternal,
|
||||
setEdges: (edges: Edge[]) => {
|
||||
@@ -32,18 +40,18 @@ const createStore = () => {
|
||||
|
||||
getNode: (id: string) => nodesInternal.find((node) => node.id === id),
|
||||
addNode: (node: Node) => {
|
||||
nodesInternal = [...nodesInternal, node];
|
||||
nodesInternal = [...nodesInternal, normalizeNode(node)];
|
||||
},
|
||||
removeNode: (id: string) => {
|
||||
nodesInternal = nodesInternal.filter((node) => node.id !== id);
|
||||
},
|
||||
updateNode: (id: string, node: Node) => {
|
||||
nodesInternal = nodesInternal.map((n) =>
|
||||
n.id === id ? { ...n, ...node } : n,
|
||||
n.id === id ? normalizeNode({ ...n, ...node }) : n,
|
||||
);
|
||||
},
|
||||
updateNodes: (update: (nodes: Node[]) => Node[]) => {
|
||||
nodesInternal = update(nodesInternal);
|
||||
nodesInternal = normalizeNodes(update(nodesInternal));
|
||||
},
|
||||
updateNodeData: (id: string, data: Node['data']) => {
|
||||
nodesInternal = nodesInternal.map((n) =>
|
||||
|
||||
Reference in New Issue
Block a user