-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstore.ts
105 lines (95 loc) · 2.41 KB
/
store.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import {
Edge,
EdgeChange,
Node,
NodeChange,
OnNodesChange,
OnEdgesChange,
applyNodeChanges,
applyEdgeChanges,
} from 'reactflow';
import { create } from 'zustand';
export type RFState = {
nodes: Node[];
edges: Edge[];
onNodesChange: OnNodesChange;
onEdgesChange: OnEdgesChange;
addChildNode: () => void;
updateNodeLabel: (nodeId: string, prompt: string) => void;
setNodes: (nodes) => void;
setEdges: (edges) => void;
getNodes: () => void;
};
const useStore = create<RFState>((set, get) => ({
nodes: [
{
id: '00001',
type: 'textInput',
data: { prompt: '[Insert a prompt here]' },
position: { x: 0, y: 0 },
},
],
edges: [],
onNodesChange: (changes: NodeChange[]) => {
set({
nodes: applyNodeChanges(changes, get().nodes),
});
},
onEdgesChange: (changes: EdgeChange[]) => {
set({
edges: applyEdgeChanges(changes, get().edges),
});
},
setNodes: (newNodes) => {
set({
nodes: newNodes,
});
},
setEdges: (newEdges) => {
set({
edges:newEdges,
});
},
getNodes: () => {
const gotNodes = get().nodes
return(gotNodes)
},
addChildNode: () => {
const getNodeId = () => `${String(+new Date()).slice(6)}`;
const newNode = {
id: getNodeId(),
type: 'textInput',
data: { prompt: '[Insert a prompt here]' },
position: {
x: 0,
y: 0
},
};
set({
nodes: [...get().nodes, newNode],
});
},
updateNodeLabel: (nodeId: string, prompt: string) => {
set({
nodes: get().nodes.map((node) => {
if (node.id === nodeId) {
// it's important to create a new object here, to inform React Flow about the changes
node.data = { ...node.data, prompt };
}
return node;
}),
});
},
updateNodeID: (nodeId: string, newID: string) => {
set({
nodes: get().nodes.map((node) => {
if (node.id === nodeId) {
// it's important to create a new object here, to inform React Flow about the changes
node.id = newID;
}
return node;
}),
});
},
}));
export default useStore;