@xrenders/xflow
Version:
一款功能强大、易用灵活的流程编辑器框架,帮助你轻松构建复杂的工作流和流程产品
107 lines • 2.98 kB
JavaScript
import { transformNodes } from '../utils';
import { addEdge, applyEdgeChanges, applyNodeChanges } from '@xyflow/react';
import isDeepEqual from 'fast-deep-equal';
import { temporal } from 'zundo';
import { createWithEqualityFn } from 'zustand/traditional';
var createStore = function createStore(initProps) {
var DEFAULT_PROPS = {
layout: 'LR',
panOnDrag: true,
nodes: [],
edges: []
};
return createWithEqualityFn()(temporal(function (set, get) {
return Object.assign(Object.assign(Object.assign({}, DEFAULT_PROPS), initProps), {
copyNodes: [],
copyEdges: [],
isAddingNode: false,
candidateNode: null,
// nodeMenus: [],
mousePosition: {
pageX: 0,
pageY: 0,
elementX: 0,
elementY: 0
},
onNodesChange: function onNodesChange(changes) {
set({
nodes: applyNodeChanges(changes, get().nodes)
});
},
onEdgesChange: function onEdgesChange(changes) {
set({
edges: applyEdgeChanges(changes, get().edges)
});
},
onConnect: function onConnect(connection) {
set({
edges: addEdge(connection, get().edges)
});
},
setNodes: function setNodes(nodes) {
set({
nodes: transformNodes(nodes)
});
},
setEdges: function setEdges(edges) {
set({
edges: edges
});
},
addNodes: function addNodes(payload) {
var isTransform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var newNodes = get().nodes.concat(transformNodes(Array.isArray(payload) ? payload : [payload]));
set({
nodes: newNodes
});
},
addEdges: function addEdges(payload) {
set({
edges: get().edges.concat(payload)
});
},
// setNodeMenus: (nodeMenus: any) => {
// set({ nodeMenus });
// },
setIsAddingNode: function setIsAddingNode(payload) {
set({
isAddingNode: payload
});
},
setCandidateNode: function setCandidateNode(candidateNode) {
set({
candidateNode: candidateNode
});
},
setMousePosition: function setMousePosition(mousePosition) {
set({
mousePosition: mousePosition
});
},
setLayout: function setLayout(layout) {
if (!layout) {
return;
}
set({
layout: layout
});
}
});
}, {
// nodes 和 edges 是引用类型,所以使用深比较
equality: isDeepEqual,
// 偏函数
partialize: function partialize(state) {
var nodes = state.nodes,
edges = state.edges;
return {
edges: edges,
nodes: nodes
};
},
onSave: function onSave(pastState, currentState) {
console.log('onSave', pastState, currentState);
}
}), Object.is);
};
export { createStore };