useNodeTools.tsx 903 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import create from "zustand";
  2. import { EdgeData, NodeData } from "reaflow";
  3. export interface NodeTools {
  4. selectedNode: string;
  5. copySelectedNode: boolean;
  6. nodes: NodeData[];
  7. edges: EdgeData[];
  8. newNodes: NodeData[];
  9. newEdges: EdgeData[];
  10. collapsedNodes: { [key: string]: NodeData[] };
  11. collapsedEdges: { [key: string]: EdgeData[] };
  12. }
  13. export interface SettingsNodeTools {
  14. setNodeTools: (key: keyof NodeTools, value: unknown) => void;
  15. }
  16. const initialStates: NodeTools = {
  17. selectedNode: "",
  18. copySelectedNode: false,
  19. nodes: [],
  20. edges: [],
  21. newNodes: [],
  22. newEdges: [],
  23. collapsedNodes: {},
  24. collapsedEdges: {},
  25. };
  26. const useNodeTools = create<NodeTools & SettingsNodeTools>((set) => ({
  27. ...initialStates,
  28. setNodeTools: (nodeTool: keyof NodeTools, value: unknown) =>
  29. set((state) => ({
  30. ...state,
  31. [nodeTool]: value,
  32. })),
  33. }));
  34. export default useNodeTools;