UNPKG

@xrenders/xflow

Version:

一款功能强大、易用灵活的流程编辑器框架,帮助你轻松构建复杂的工作流和流程产品

107 lines 2.98 kB
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 };