@foresthubai/workflow-builder 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WorkflowBuilder.d.ts.map +1 -1
- package/dist/WorkflowBuilder.js +8 -10
- package/dist/WorkflowBuilder.js.map +1 -1
- package/dist/hooks/useWorkflowSerialization.d.ts +1 -0
- package/dist/hooks/useWorkflowSerialization.d.ts.map +1 -1
- package/dist/hooks/useWorkflowSerialization.js +26 -13
- package/dist/hooks/useWorkflowSerialization.js.map +1 -1
- package/package.json +2 -2
- package/src/WorkflowBuilder.tsx +6 -10
- package/src/hooks/useWorkflowSerialization.ts +27 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowBuilder.d.ts","sourceRoot":"","sources":["../src/WorkflowBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkflowBuilder.d.ts","sourceRoot":"","sources":["../src/WorkflowBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AA+BlE,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG5E,uEAAuE;AACvE,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAErF,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAErD;AAED,mCAAmC;AACnC,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEpD;AAMD,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,yEAAyE;IACzE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,sFAAsF;IACtF,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGxC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1E,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IAEpC,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;IAGlB,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,WAAW,CAAC;IAG3B,QAAQ,EAAE,MAAM,IAAI,CAAC;IAGrB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IAGjB,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACnD;AAOD,eAAO,MAAM,eAAe,wHAqS3B,CAAC"}
|
package/dist/WorkflowBuilder.js
CHANGED
|
@@ -14,7 +14,7 @@ import { useFunctionDiagnosticsSync } from "./hooks/useFunctionDiagnosticsSync";
|
|
|
14
14
|
import { useSuppressThemeTransition } from "./hooks/useSuppressThemeTransition";
|
|
15
15
|
import { useFunctions } from "./hooks/useFunctions";
|
|
16
16
|
import { useWorkflowSerialization, readStateFromStores } from "./hooks/useWorkflowSerialization";
|
|
17
|
-
import {
|
|
17
|
+
import { getAllCanvasStores, getOrCreateCanvasStore, subscribeCanvasRegistryChanges, MAIN_CANVAS_ID, } from "./stores/canvasStore";
|
|
18
18
|
import { useDebugStore } from "./stores/debugStore";
|
|
19
19
|
import { useEditorStore } from "./stores/editorStore";
|
|
20
20
|
/** True when canvas mutations should be blocked (preview or debug). */
|
|
@@ -38,7 +38,7 @@ export const WorkflowBuilder = forwardRef(function WorkflowBuilder(props, ref) {
|
|
|
38
38
|
if (language && i18n.language !== language)
|
|
39
39
|
i18n.changeLanguage(language);
|
|
40
40
|
}, [language]);
|
|
41
|
-
const { importProject, exportProject } = useWorkflowSerialization();
|
|
41
|
+
const { importProject, exportProject, clearProject } = useWorkflowSerialization();
|
|
42
42
|
// Color-mode toggles should snap, not fade — see hook docs.
|
|
43
43
|
useSuppressThemeTransition();
|
|
44
44
|
// Keep project-scoped (channel + memory + model) diagnostics in sync. Mounted
|
|
@@ -126,8 +126,12 @@ export const WorkflowBuilder = forwardRef(function WorkflowBuilder(props, ref) {
|
|
|
126
126
|
try {
|
|
127
127
|
if (initialMode)
|
|
128
128
|
useEditorStore.getState().setBuilderMode(initialMode);
|
|
129
|
+
// No initialWorkflow → start empty; the module-level stores may still hold the
|
|
130
|
+
// previously mounted project, so clear them rather than leaving them untouched.
|
|
129
131
|
if (initialWorkflow)
|
|
130
132
|
importProject(initialWorkflow);
|
|
133
|
+
else
|
|
134
|
+
clearProject();
|
|
131
135
|
}
|
|
132
136
|
catch (e) {
|
|
133
137
|
onError?.(e instanceof Error ? e : new Error(String(e)));
|
|
@@ -244,20 +248,14 @@ export const WorkflowBuilder = forwardRef(function WorkflowBuilder(props, ref) {
|
|
|
244
248
|
}
|
|
245
249
|
},
|
|
246
250
|
exportWorkflow: () => exportProject(),
|
|
247
|
-
clear: () =>
|
|
248
|
-
clearAllCanvasStores();
|
|
249
|
-
// Function declarations are project-scoped (not in canvas stores), so reset
|
|
250
|
-
// them explicitly alongside the cleared bodies.
|
|
251
|
-
useEditorStore.getState().setFunctions(() => ({}));
|
|
252
|
-
useEditorStore.getState().clearSelection();
|
|
253
|
-
},
|
|
251
|
+
clear: () => clearProject(),
|
|
254
252
|
setMode: (mode) => useEditorStore.getState().setBuilderMode(mode),
|
|
255
253
|
getMode: () => useEditorStore.getState().builderMode,
|
|
256
254
|
validate: runValidate,
|
|
257
255
|
undo: () => getOrCreateCanvasStore(useEditorStore.getState().activeCanvasId).undo(),
|
|
258
256
|
redo: () => getOrCreateCanvasStore(useEditorStore.getState().activeCanvasId).redo(),
|
|
259
257
|
setDebugPhase: (phase) => useDebugStore.getState().setPhase(phase),
|
|
260
|
-
}), [importProject, exportProject, onError, runValidate]);
|
|
258
|
+
}), [importProject, exportProject, clearProject, onError, runValidate]);
|
|
261
259
|
// I18nextProvider scopes the builder's PRIVATE i18n instance to this subtree,
|
|
262
260
|
// so the useTranslation() consumers read it (never the host's i18next).
|
|
263
261
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkflowBuilder.js","sourceRoot":"","sources":["../src/WorkflowBuilder.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,cAAc,EACd,aAAa,GAGd,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,gBAAgB,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"WorkflowBuilder.js","sourceRoot":"","sources":["../src/WorkflowBuilder.tsx"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { type ApiWorkflow, type Workflow } from "@foresthubai/workflow-core/work
|
|
|
11
11
|
export declare function useWorkflowSerialization(): {
|
|
12
12
|
exportProject: () => ApiWorkflow;
|
|
13
13
|
importProject: (workflow: ApiWorkflow) => void;
|
|
14
|
+
clearProject: () => void;
|
|
14
15
|
};
|
|
15
16
|
/**
|
|
16
17
|
* Read the editor's live Zustand state into a {@link Workflow} literal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWorkflowSerialization.d.ts","sourceRoot":"","sources":["../../src/hooks/useWorkflowSerialization.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAe,MAAM,qCAAqC,CAAC;AAY3H;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB;
|
|
1
|
+
{"version":3,"file":"useWorkflowSerialization.d.ts","sourceRoot":"","sources":["../../src/hooks/useWorkflowSerialization.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAe,MAAM,qCAAqC,CAAC;AAY3H;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB;yBAiDA,WAAW;8BAhDJ,WAAW,KAAG,IAAI;wBAuD1B,IAAI;EAe1C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAqC9C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback } from "react";
|
|
2
2
|
import { serialize, deserialize } from "@foresthubai/workflow-core/workflow";
|
|
3
3
|
import { migrate } from "@foresthubai/workflow-core/migration";
|
|
4
|
-
import { clearAllCanvasStores, getOrCreateCanvasStore, getAllCanvasStores, notifyCanvasRegistryChange } from "../stores/canvasStore";
|
|
4
|
+
import { clearAllCanvasStores, getOrCreateCanvasStore, getAllCanvasStores, notifyCanvasRegistryChange, MAIN_CANVAS_ID } from "../stores/canvasStore";
|
|
5
5
|
import { useEditorStore } from "../stores/editorStore";
|
|
6
6
|
import { getReactFlowType } from "../utils/graphOperations";
|
|
7
7
|
/**
|
|
@@ -43,18 +43,15 @@ export function useWorkflowSerialization() {
|
|
|
43
43
|
// fully merged set core already computed (includes declared + fnarg).
|
|
44
44
|
store.getState().setVariables(() => canvas.variables);
|
|
45
45
|
}
|
|
46
|
+
// Reconcile project-scoped resources to exactly what this workflow declares.
|
|
47
|
+
// The editor stores are module-level and outlive the previously loaded project,
|
|
48
|
+
// so a workflow that declares none of a given kind must still reset it —
|
|
49
|
+
// otherwise the prior project's channels/memory/models bleed in (the canvas
|
|
50
|
+
// stores get this for free via clearAllCanvasStores above, as does setFunctions).
|
|
46
51
|
const { channels, memory, models } = state;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (memory && Object.keys(memory).length > 0) {
|
|
51
|
-
useEditorStore.getState().setMemory(() => memory);
|
|
52
|
-
}
|
|
53
|
-
if (models && Object.keys(models).length > 0) {
|
|
54
|
-
useEditorStore.getState().setModels(() => models);
|
|
55
|
-
}
|
|
56
|
-
// Replace the full function set (bodies are already initialized above, so the
|
|
57
|
-
// migration subscription on setFunctions sees populated canvases).
|
|
52
|
+
useEditorStore.getState().setChannels(() => channels);
|
|
53
|
+
useEditorStore.getState().setMemory(() => memory);
|
|
54
|
+
useEditorStore.getState().setModels(() => models);
|
|
58
55
|
useEditorStore.getState().setFunctions(() => state.functions);
|
|
59
56
|
// The function canvas stores were created after clearAllCanvasStores' notify,
|
|
60
57
|
// so tell WorkflowBuilder to re-subscribe to the new set.
|
|
@@ -63,7 +60,23 @@ export function useWorkflowSerialization() {
|
|
|
63
60
|
const exportProject = useCallback(() => {
|
|
64
61
|
return serialize(readStateFromStores());
|
|
65
62
|
}, []);
|
|
66
|
-
|
|
63
|
+
// Inverse of importProject: reset every (module-level) store to empty so a fresh
|
|
64
|
+
// builder never inherits the previously mounted project. Used by the clear() handle
|
|
65
|
+
// and on mount when no initialWorkflow is supplied.
|
|
66
|
+
const clearProject = useCallback(() => {
|
|
67
|
+
clearAllCanvasStores(); // drops all canvas stores, re-seeds an empty main, notifies
|
|
68
|
+
const editor = useEditorStore.getState();
|
|
69
|
+
// A stale non-main activeCanvasId would lazily resurrect a phantom function body.
|
|
70
|
+
editor.setActiveCanvas(MAIN_CANVAS_ID);
|
|
71
|
+
// Project-scoped resources aren't touched by clearAllCanvasStores. Empty only when
|
|
72
|
+
// non-empty so an already-clean store doesn't bump mutationCount (as importProject).
|
|
73
|
+
editor.setChannels((c) => (Object.keys(c).length ? {} : c));
|
|
74
|
+
editor.setMemory((m) => (Object.keys(m).length ? {} : m));
|
|
75
|
+
editor.setModels((m) => (Object.keys(m).length ? {} : m));
|
|
76
|
+
editor.setFunctions((f) => (Object.keys(f).length ? {} : f));
|
|
77
|
+
editor.clearSelection();
|
|
78
|
+
}, []);
|
|
79
|
+
return { exportProject, importProject, clearProject };
|
|
67
80
|
}
|
|
68
81
|
/**
|
|
69
82
|
* Read the editor's live Zustand state into a {@link Workflow} literal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWorkflowSerialization.js","sourceRoot":"","sources":["../../src/hooks/useWorkflowSerialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAgD,MAAM,qCAAqC,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAO/D,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useWorkflowSerialization.js","sourceRoot":"","sources":["../../src/hooks/useWorkflowSerialization.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foresthubai/workflow-builder",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "Reusable React component library: the workflow canvas/editor. Imports workflow-core for types and validation.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"tailwindcss": "^3.4.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@foresthubai/workflow-core": "0.4.
|
|
44
|
+
"@foresthubai/workflow-core": "0.4.3",
|
|
45
45
|
"@radix-ui/react-alert-dialog": "^1.1.1",
|
|
46
46
|
"@radix-ui/react-checkbox": "^1.1.1",
|
|
47
47
|
"@radix-ui/react-collapsible": "^1.1.0",
|
package/src/WorkflowBuilder.tsx
CHANGED
|
@@ -24,7 +24,6 @@ import { useSuppressThemeTransition } from "./hooks/useSuppressThemeTransition";
|
|
|
24
24
|
import { useFunctions } from "./hooks/useFunctions";
|
|
25
25
|
import { useWorkflowSerialization, readStateFromStores } from "./hooks/useWorkflowSerialization";
|
|
26
26
|
import {
|
|
27
|
-
clearAllCanvasStores,
|
|
28
27
|
getAllCanvasStores,
|
|
29
28
|
getOrCreateCanvasStore,
|
|
30
29
|
subscribeCanvasRegistryChanges,
|
|
@@ -134,7 +133,7 @@ export const WorkflowBuilder = forwardRef<WorkflowBuilderHandle, WorkflowBuilder
|
|
|
134
133
|
if (language && i18n.language !== language) i18n.changeLanguage(language);
|
|
135
134
|
}, [language]);
|
|
136
135
|
|
|
137
|
-
const { importProject, exportProject } = useWorkflowSerialization();
|
|
136
|
+
const { importProject, exportProject, clearProject } = useWorkflowSerialization();
|
|
138
137
|
|
|
139
138
|
// Color-mode toggles should snap, not fade — see hook docs.
|
|
140
139
|
useSuppressThemeTransition();
|
|
@@ -223,7 +222,10 @@ export const WorkflowBuilder = forwardRef<WorkflowBuilderHandle, WorkflowBuilder
|
|
|
223
222
|
initialLoadDone.current = true;
|
|
224
223
|
try {
|
|
225
224
|
if (initialMode) useEditorStore.getState().setBuilderMode(initialMode);
|
|
225
|
+
// No initialWorkflow → start empty; the module-level stores may still hold the
|
|
226
|
+
// previously mounted project, so clear them rather than leaving them untouched.
|
|
226
227
|
if (initialWorkflow) importProject(initialWorkflow);
|
|
228
|
+
else clearProject();
|
|
227
229
|
} catch (e) {
|
|
228
230
|
onError?.(e instanceof Error ? e : new Error(String(e)));
|
|
229
231
|
}
|
|
@@ -352,13 +354,7 @@ export const WorkflowBuilder = forwardRef<WorkflowBuilderHandle, WorkflowBuilder
|
|
|
352
354
|
}
|
|
353
355
|
},
|
|
354
356
|
exportWorkflow: () => exportProject(),
|
|
355
|
-
clear: () =>
|
|
356
|
-
clearAllCanvasStores();
|
|
357
|
-
// Function declarations are project-scoped (not in canvas stores), so reset
|
|
358
|
-
// them explicitly alongside the cleared bodies.
|
|
359
|
-
useEditorStore.getState().setFunctions(() => ({}));
|
|
360
|
-
useEditorStore.getState().clearSelection();
|
|
361
|
-
},
|
|
357
|
+
clear: () => clearProject(),
|
|
362
358
|
setMode: (mode) => useEditorStore.getState().setBuilderMode(mode),
|
|
363
359
|
getMode: () => useEditorStore.getState().builderMode,
|
|
364
360
|
validate: runValidate,
|
|
@@ -366,7 +362,7 @@ export const WorkflowBuilder = forwardRef<WorkflowBuilderHandle, WorkflowBuilder
|
|
|
366
362
|
redo: () => getOrCreateCanvasStore(useEditorStore.getState().activeCanvasId).redo(),
|
|
367
363
|
setDebugPhase: (phase) => useDebugStore.getState().setPhase(phase),
|
|
368
364
|
}),
|
|
369
|
-
[importProject, exportProject, onError, runValidate],
|
|
365
|
+
[importProject, exportProject, clearProject, onError, runValidate],
|
|
370
366
|
);
|
|
371
367
|
|
|
372
368
|
// I18nextProvider scopes the builder's PRIVATE i18n instance to this subtree,
|
|
@@ -7,7 +7,7 @@ import type { Channel } from "@foresthubai/workflow-core/channel";
|
|
|
7
7
|
import type { Memory } from "@foresthubai/workflow-core/memory";
|
|
8
8
|
import type { Model } from "@foresthubai/workflow-core/model";
|
|
9
9
|
import { Edge, Node } from "@xyflow/react";
|
|
10
|
-
import { clearAllCanvasStores, getOrCreateCanvasStore, getAllCanvasStores, notifyCanvasRegistryChange } from "../stores/canvasStore";
|
|
10
|
+
import { clearAllCanvasStores, getOrCreateCanvasStore, getAllCanvasStores, notifyCanvasRegistryChange, MAIN_CANVAS_ID } from "../stores/canvasStore";
|
|
11
11
|
import { useEditorStore } from "../stores/editorStore";
|
|
12
12
|
import { getReactFlowType } from "../utils/graphOperations";
|
|
13
13
|
|
|
@@ -53,18 +53,15 @@ export function useWorkflowSerialization() {
|
|
|
53
53
|
store.getState().setVariables(() => canvas.variables);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
// Reconcile project-scoped resources to exactly what this workflow declares.
|
|
57
|
+
// The editor stores are module-level and outlive the previously loaded project,
|
|
58
|
+
// so a workflow that declares none of a given kind must still reset it —
|
|
59
|
+
// otherwise the prior project's channels/memory/models bleed in (the canvas
|
|
60
|
+
// stores get this for free via clearAllCanvasStores above, as does setFunctions).
|
|
56
61
|
const { channels, memory, models } = state;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (memory && Object.keys(memory).length > 0) {
|
|
61
|
-
useEditorStore.getState().setMemory(() => memory);
|
|
62
|
-
}
|
|
63
|
-
if (models && Object.keys(models).length > 0) {
|
|
64
|
-
useEditorStore.getState().setModels(() => models);
|
|
65
|
-
}
|
|
66
|
-
// Replace the full function set (bodies are already initialized above, so the
|
|
67
|
-
// migration subscription on setFunctions sees populated canvases).
|
|
62
|
+
useEditorStore.getState().setChannels(() => channels);
|
|
63
|
+
useEditorStore.getState().setMemory(() => memory);
|
|
64
|
+
useEditorStore.getState().setModels(() => models);
|
|
68
65
|
useEditorStore.getState().setFunctions(() => state.functions);
|
|
69
66
|
|
|
70
67
|
// The function canvas stores were created after clearAllCanvasStores' notify,
|
|
@@ -76,7 +73,24 @@ export function useWorkflowSerialization() {
|
|
|
76
73
|
return serialize(readStateFromStores());
|
|
77
74
|
}, []);
|
|
78
75
|
|
|
79
|
-
|
|
76
|
+
// Inverse of importProject: reset every (module-level) store to empty so a fresh
|
|
77
|
+
// builder never inherits the previously mounted project. Used by the clear() handle
|
|
78
|
+
// and on mount when no initialWorkflow is supplied.
|
|
79
|
+
const clearProject = useCallback((): void => {
|
|
80
|
+
clearAllCanvasStores(); // drops all canvas stores, re-seeds an empty main, notifies
|
|
81
|
+
const editor = useEditorStore.getState();
|
|
82
|
+
// A stale non-main activeCanvasId would lazily resurrect a phantom function body.
|
|
83
|
+
editor.setActiveCanvas(MAIN_CANVAS_ID);
|
|
84
|
+
// Project-scoped resources aren't touched by clearAllCanvasStores. Empty only when
|
|
85
|
+
// non-empty so an already-clean store doesn't bump mutationCount (as importProject).
|
|
86
|
+
editor.setChannels((c) => (Object.keys(c).length ? {} : c));
|
|
87
|
+
editor.setMemory((m) => (Object.keys(m).length ? {} : m));
|
|
88
|
+
editor.setModels((m) => (Object.keys(m).length ? {} : m));
|
|
89
|
+
editor.setFunctions((f) => (Object.keys(f).length ? {} : f));
|
|
90
|
+
editor.clearSelection();
|
|
91
|
+
}, []);
|
|
92
|
+
|
|
93
|
+
return { exportProject, importProject, clearProject };
|
|
80
94
|
}
|
|
81
95
|
|
|
82
96
|
/**
|