UNPKG

@difizen/ai-flow

Version:

Scalable, out-of-the-box, agent-oriented flow

200 lines (197 loc) 8.11 kB
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } import { SAVE_DEBOUNCE_TIME } from "../constants/constant"; import { getLayoutByDagre } from "../utils"; import '@xyflow/react'; import { produce } from 'immer'; import { cloneDeep, debounce } from 'lodash'; import { create } from 'zustand'; import { useFlowStore } from "./flowStore"; var defaultOptions = { maxHistorySize: 100, enableShortcuts: true }; // let past: Snap[] = []; // let future: Snap[] = []; // flow 的基本操作:撤销重做、快照生产、自动布局、初始化 export var useFlowsManagerStore = create(function (set, get) { return { past: [], future: [], // auto save autoLayout: function autoLayout(fitview) { return new Promise(function (resolve) { var _useFlowStore$getStat = useFlowStore.getState(), nodes = _useFlowStore$getStat.nodes, edges = _useFlowStore$getStat.edges, setNodes = _useFlowStore$getStat.setNodes; var layout = getLayoutByDagre(nodes, edges); var newNodes = produce(nodes, function (draft) { draft.forEach(function (node) { var _node$measured, _node$measured2; var nodeWithPosition = layout.node(node.id); node.position = { x: nodeWithPosition.x - (((_node$measured = node.measured) === null || _node$measured === void 0 ? void 0 : _node$measured.width) || 0) / 2, y: nodeWithPosition.y - (((_node$measured2 = node.measured) === null || _node$measured2 === void 0 ? void 0 : _node$measured2.height) || 0) / 2 }; }); }); setNodes(newNodes); resolve(true); }).then(function (res) { if (res && fitview) { var _useFlowStore$getStat2 = useFlowStore.getState(), reactFlowInstance = _useFlowStore$getStat2.reactFlowInstance; return reactFlowInstance === null || reactFlowInstance === void 0 ? void 0 : reactFlowInstance.fitView(); } return; }); }, autoSaving: true, saveLoading: false, saveFlow: function saveFlow() { get().setSavedAt(new Date().toISOString()); }, setNodesFolded: function setNodesFolded(folded) { var _useFlowStore$getStat3 = useFlowStore.getState(), setNodeFolded = _useFlowStore$getStat3.setNodeFolded, nodes = _useFlowStore$getStat3.nodes; nodes.forEach(function (n) { return setNodeFolded(n.id, folded); }); get().takeSnapshot(); }, setSaveFlow: function setSaveFlow(saveFlow) { return set({ saveFlow: saveFlow }); }, setSaveLoading: function setSaveLoading(saveLoading) { return set({ saveLoading: saveLoading }); }, setAutoSaving: function setAutoSaving(autoSaving) { return set({ autoSaving: autoSaving }); }, autoSavingInterval: SAVE_DEBOUNCE_TIME, setAutoSavingInterval: function setAutoSavingInterval(autoSavingInterval) { return set({ autoSavingInterval: autoSavingInterval }); }, autoSaveFlow: undefined, hasPast: function hasPast() { console.log('🚀 ~ past:', get().past); return get().past && get().past.length > 0; }, hasFuture: function hasFuture() { console.log('🚀 ~ future:', get().past); return get().future && get().future.length > 0; }, savedAt: '未保存', setSavedAt: function setSavedAt(savedAt) { return set({ savedAt: savedAt }); }, initializeAutoSaveFlow: function initializeAutoSaveFlow() { var interval = get().autoSavingInterval; var autoSaveFlow = debounce(function () { get().saveFlow(); // 在这里执行自动保存的逻辑 }, interval); set({ autoSaveFlow: autoSaveFlow }); }, // redo undo takeSnapshot: function takeSnapshot() { var _get$past$length, _get$past; var flowStore = useFlowStore.getState(); var newState = { nodes: cloneDeep(flowStore.nodes), edges: cloneDeep(flowStore.edges) }; var pastLength = (_get$past$length = (_get$past = get().past) === null || _get$past === void 0 ? void 0 : _get$past.length) !== null && _get$past$length !== void 0 ? _get$past$length : 0; if (pastLength > 0 && JSON.stringify(get().past[pastLength - 1]) === JSON.stringify(newState)) { return; } if (pastLength > 0) { var past = get().past.slice(pastLength - defaultOptions.maxHistorySize + 1, pastLength); past.push(newState); set({ past: _toConsumableArray(past) }); } else { set({ past: [newState] }); } set({ future: [] }); }, undo: function undo() { var _get$past$length2, _get$past2, _get$past3, _get$past4; var newState = useFlowStore.getState(); var pastLength = (_get$past$length2 = (_get$past2 = get().past) === null || _get$past2 === void 0 ? void 0 : _get$past2.length) !== null && _get$past$length2 !== void 0 ? _get$past$length2 : 0; var pastState = (_get$past3 = (_get$past4 = get().past) === null || _get$past4 === void 0 ? void 0 : _get$past4[pastLength - 1]) !== null && _get$past3 !== void 0 ? _get$past3 : null; if (pastState) { var past = get().past.slice(0, pastLength - 1); set({ past: past }); if (!get().future) { set({ future: [] }); } var newFuture = produce(get().future, function (draft) { draft.push({ nodes: newState.nodes, edges: newState.edges }); }); set({ future: newFuture }); newState.setNodes(pastState.nodes); newState.setEdges(pastState.edges); } }, redo: function redo() { var _get$future$length, _get$future, _get$future2, _get$future3; var newState = useFlowStore.getState(); var futureLength = (_get$future$length = (_get$future = get().future) === null || _get$future === void 0 ? void 0 : _get$future.length) !== null && _get$future$length !== void 0 ? _get$future$length : 0; var futureState = (_get$future2 = (_get$future3 = get().future) === null || _get$future3 === void 0 ? void 0 : _get$future3[futureLength - 1]) !== null && _get$future2 !== void 0 ? _get$future2 : null; if (futureState) { set({ future: get().future.slice(0, futureLength - 1) }); if (!get().past) { set({ past: [] }); } var newPast = produce(get().past, function (draft) { draft.push({ nodes: newState.nodes, edges: newState.edges }); }); set({ past: newPast }); newState.setNodes(futureState.nodes); newState.setEdges(futureState.edges); } } }; });