dograh/ui/src/components/flow/nodes/common/useNodeHandlers.ts

41 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-09-09 14:37:32 +05:30
import { useCallback, useState } from "react";
2025-11-06 15:15:03 +05:30
import { useWorkflowStore } from "@/app/workflow/[workflowId]/stores/workflowStore";
import { FlowNodeData } from "@/components/flow/types";
2025-09-09 14:37:32 +05:30
interface UseNodeHandlersProps {
id: string;
additionalData?: Record<string, string | boolean>;
}
export const useNodeHandlers = ({ id, additionalData = {} }: UseNodeHandlersProps) => {
const [open, setOpen] = useState(false);
2025-11-06 15:15:03 +05:30
const updateNode = useWorkflowStore((state) => state.updateNode);
const deleteNode = useWorkflowStore((state) => state.deleteNode);
const nodes = useWorkflowStore((state) => state.nodes);
2025-09-09 14:37:32 +05:30
const handleSaveNodeData = useCallback(
(updatedData: FlowNodeData) => {
2025-11-06 15:15:03 +05:30
// Find the current node to merge data properly
const currentNode = nodes.find(node => node.id === id);
if (currentNode) {
updateNode(id, {
data: { ...currentNode.data, ...updatedData, ...additionalData }
});
}
2025-09-09 14:37:32 +05:30
},
2025-11-06 15:15:03 +05:30
[id, updateNode, additionalData, nodes]
2025-09-09 14:37:32 +05:30
);
const handleDeleteNode = useCallback(() => {
2025-11-06 15:15:03 +05:30
deleteNode(id);
}, [id, deleteNode]);
2025-09-09 14:37:32 +05:30
return {
open,
setOpen,
handleSaveNodeData,
handleDeleteNode,
};
};