cleanup useSvelteFlow
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
export * from './useSvelteFlow.svelte';
|
|
||||||
+51
-83
@@ -1,4 +1,3 @@
|
|||||||
import { get } from 'svelte/store';
|
|
||||||
import {
|
import {
|
||||||
getOverlappingArea,
|
getOverlappingArea,
|
||||||
isRectObject,
|
isRectObject,
|
||||||
@@ -207,11 +206,18 @@ export function useSvelteFlow(): {
|
|||||||
* @example
|
* @example
|
||||||
* updateNode('node-1', (node) => ({ position: { x: node.position.x + 10, y: node.position.y } }));
|
* updateNode('node-1', (node) => ({ position: { x: node.position.x + 10, y: node.position.y } }));
|
||||||
*/
|
*/
|
||||||
updateNode: (
|
// updateNode: (
|
||||||
id: string,
|
// id: string,
|
||||||
nodeUpdate: Partial<Node> | ((node: Node) => Partial<Node>),
|
// nodeUpdate: Partial<Node> | ((node: Node) => Partial<Node>),
|
||||||
options?: { replace: boolean }
|
// options?: { replace: boolean }
|
||||||
) => void;
|
// ) => void;
|
||||||
|
updateNode:
|
||||||
|
| ((id: string, nodeUpdate: Node | ((node: Node) => Node), options: { replace: true }) => void)
|
||||||
|
| ((
|
||||||
|
id: string,
|
||||||
|
nodeUpdate: Partial<Node> | ((node: Node) => Partial<Node>),
|
||||||
|
options: { replace: false }
|
||||||
|
) => void);
|
||||||
/**
|
/**
|
||||||
* Updates the data attribute of a node.
|
* Updates the data attribute of a node.
|
||||||
*
|
*
|
||||||
@@ -242,11 +248,13 @@ export function useSvelteFlow(): {
|
|||||||
* @example
|
* @example
|
||||||
* updateNode('node-1', (node) => ({ position: { x: node.position.x + 10, y: node.position.y } }));
|
* updateNode('node-1', (node) => ({ position: { x: node.position.x + 10, y: node.position.y } }));
|
||||||
*/
|
*/
|
||||||
updateEdge: (
|
updateEdge:
|
||||||
id: string,
|
| ((id: string, edgeUpdate: Edge | ((edge: Edge) => Edge), options: { replace: true }) => void)
|
||||||
edgeUpdate: Partial<Edge> | ((edge: Edge) => Partial<Edge>),
|
| ((
|
||||||
options?: { replace: boolean }
|
id: string,
|
||||||
) => void;
|
edgeUpdate: Partial<Edge> | ((edge: Edge) => Partial<Edge>),
|
||||||
|
options?: { replace: false }
|
||||||
|
) => void);
|
||||||
toObject: () => { nodes: Node[]; edges: Edge[]; viewport: Viewport };
|
toObject: () => { nodes: Node[]; edges: Edge[]; viewport: Viewport };
|
||||||
/**
|
/**
|
||||||
* Returns the bounds of the given nodes or node ids.
|
* Returns the bounds of the given nodes or node ids.
|
||||||
@@ -278,7 +286,6 @@ export function useSvelteFlow(): {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
// const { nodes, edges } = store;
|
|
||||||
|
|
||||||
const getNodeRect = (node: Node | { id: Node['id'] }): Rect | null => {
|
const getNodeRect = (node: Node | { id: Node['id'] }): Rect | null => {
|
||||||
const nodeToUse = isNode(node) ? node : store.nodeLookup.get(node.id)!;
|
const nodeToUse = isNode(node) ? node : store.nodeLookup.get(node.id)!;
|
||||||
@@ -302,63 +309,35 @@ export function useSvelteFlow(): {
|
|||||||
return nodeToRect(nodeWithPosition);
|
return nodeToRect(nodeWithPosition);
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateNode = (
|
function updateNode(
|
||||||
id: string,
|
id: string,
|
||||||
nodeUpdate: Partial<Node> | ((node: Node) => Partial<Node>),
|
nodeUpdate: Partial<Node> | ((node: Node) => Partial<Node>),
|
||||||
options: { replace: boolean } = { replace: false }
|
options: { replace: boolean } = { replace: false }
|
||||||
) => {
|
) {
|
||||||
const node = store.nodeLookup.get(id)?.internals.userNode;
|
store.nodes = store.nodes.map((node) => {
|
||||||
|
if (node.id === id) {
|
||||||
|
const nextNode = typeof nodeUpdate === 'function' ? nodeUpdate(node as Node) : nodeUpdate;
|
||||||
|
return options?.replace && isNode(nextNode) ? nextNode : { ...node, ...nextNode };
|
||||||
|
}
|
||||||
|
|
||||||
if (!node) {
|
return node;
|
||||||
return;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextNode = typeof nodeUpdate === 'function' ? nodeUpdate(node as Node) : nodeUpdate;
|
function updateEdge(
|
||||||
|
|
||||||
// if (options.replace) {
|
|
||||||
// nodes.update((nds) =>
|
|
||||||
// nds.map((node) => {
|
|
||||||
// if (node.id === id) {
|
|
||||||
// return isNode(nextNode) ? nextNode : { ...node, ...nextNode };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return node;
|
|
||||||
// })
|
|
||||||
// );
|
|
||||||
// } else {
|
|
||||||
// Object.assign(node, nextNode);
|
|
||||||
// nodes.set(store.nodes);
|
|
||||||
// }
|
|
||||||
};
|
|
||||||
|
|
||||||
const updateEdge = (
|
|
||||||
id: string,
|
id: string,
|
||||||
edgeUpdate: Partial<Edge> | ((edge: Edge) => Partial<Edge>),
|
edgeUpdate: Partial<Edge> | ((edge: Edge) => Partial<Edge>),
|
||||||
options: { replace: boolean } = { replace: false }
|
options: { replace: boolean } = { replace: false }
|
||||||
) => {
|
) {
|
||||||
const edge = store.edgeLookup.get(id);
|
store.edges = store.edges.map((edge) => {
|
||||||
|
if (edge.id === id) {
|
||||||
|
const nextEdge = typeof edgeUpdate === 'function' ? edgeUpdate(edge) : edgeUpdate;
|
||||||
|
return options.replace && isEdge(nextEdge) ? nextEdge : { ...edge, ...nextEdge };
|
||||||
|
}
|
||||||
|
|
||||||
if (!edge) {
|
return edge;
|
||||||
return;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextEdge = typeof edgeUpdate === 'function' ? edgeUpdate(edge as Edge) : edgeUpdate;
|
|
||||||
|
|
||||||
// if (options.replace) {
|
|
||||||
// edges.update((edgs) =>
|
|
||||||
// edgs.map((edge) => {
|
|
||||||
// if (edge.id === id) {
|
|
||||||
// return isEdge(nextEdge) ? nextEdge : { ...edge, ...nextEdge };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return edge;
|
|
||||||
// })
|
|
||||||
// );
|
|
||||||
// } else {
|
|
||||||
// Object.assign(edge, nextEdge);
|
|
||||||
// edges.set(store.edges);
|
|
||||||
// }
|
|
||||||
};
|
|
||||||
|
|
||||||
const getInternalNode = (id: string) => store.nodeLookup.get(id);
|
const getInternalNode = (id: string) => store.nodeLookup.get(id);
|
||||||
|
|
||||||
@@ -485,17 +464,13 @@ export function useSvelteFlow(): {
|
|||||||
onBeforeDelete: store.onbeforedelete
|
onBeforeDelete: store.onbeforedelete
|
||||||
});
|
});
|
||||||
|
|
||||||
// if (matchingNodes) {
|
if (matchingNodes) {
|
||||||
// nodes.update((nds) =>
|
store.nodes = store.nodes.filter((node) => !matchingNodes.some(({ id }) => id === node.id));
|
||||||
// nds.filter((node) => !matchingNodes.some(({ id }) => id === node.id))
|
}
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (matchingEdges) {
|
if (matchingEdges) {
|
||||||
// edges.update((eds) =>
|
store.edges = store.edges.filter((edge) => !matchingEdges.some(({ id }) => id === edge.id));
|
||||||
// eds.filter((edge) => !matchingEdges.some(({ id }) => id === edge.id))
|
}
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
deletedNodes: matchingNodes,
|
deletedNodes: matchingNodes,
|
||||||
@@ -546,17 +521,11 @@ export function useSvelteFlow(): {
|
|||||||
},
|
},
|
||||||
|
|
||||||
toObject: () => {
|
toObject: () => {
|
||||||
return {
|
return structuredClone({
|
||||||
nodes: store.nodes.map((node) => ({
|
nodes: [...store.nodes],
|
||||||
...node,
|
edges: [...store.edges],
|
||||||
// we want to make sure that changes to the nodes object that gets returned by toObject
|
|
||||||
// do not affect the nodes object
|
|
||||||
position: { ...node.position },
|
|
||||||
data: { ...node.data }
|
|
||||||
})),
|
|
||||||
edges: store.edges.map((edge) => ({ ...edge })),
|
|
||||||
viewport: { ...store.viewport }
|
viewport: { ...store.viewport }
|
||||||
};
|
});
|
||||||
},
|
},
|
||||||
updateNode,
|
updateNode,
|
||||||
updateNodeData: (id, dataUpdate, options) => {
|
updateNodeData: (id, dataUpdate, options) => {
|
||||||
@@ -568,9 +537,7 @@ export function useSvelteFlow(): {
|
|||||||
|
|
||||||
const nextData = typeof dataUpdate === 'function' ? dataUpdate(node) : dataUpdate;
|
const nextData = typeof dataUpdate === 'function' ? dataUpdate(node) : dataUpdate;
|
||||||
|
|
||||||
node.data = options?.replace ? nextData : { ...node.data, ...nextData };
|
updateNode(id, { data: options?.replace ? nextData : { ...node.data, ...nextData } });
|
||||||
|
|
||||||
// nodes.update((nds) => nds);
|
|
||||||
},
|
},
|
||||||
updateEdge,
|
updateEdge,
|
||||||
getNodesBounds: (nodes) => {
|
getNodesBounds: (nodes) => {
|
||||||
@@ -580,6 +547,7 @@ export function useSvelteFlow(): {
|
|||||||
Array.from(store.connectionLookup.get(`${nodeId}-${type}-${id ?? null}`)?.values() ?? [])
|
Array.from(store.connectionLookup.get(`${nodeId}-${type}-${id ?? null}`)?.values() ?? [])
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getElements(lookup: Map<string, InternalNode>, ids: string[]): Node[];
|
function getElements(lookup: Map<string, InternalNode>, ids: string[]): Node[];
|
||||||
function getElements(lookup: Map<string, Edge>, ids: string[]): Edge[];
|
function getElements(lookup: Map<string, Edge>, ids: string[]): Edge[];
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
@@ -31,7 +31,7 @@ export { useStore } from '$lib/store';
|
|||||||
export * from '$lib/utils';
|
export * from '$lib/utils';
|
||||||
|
|
||||||
//hooks
|
//hooks
|
||||||
export * from '$lib/hooks/useSvelteFlow.svelte';
|
export * from '$lib/hooks/useSvelteFlow';
|
||||||
export * from '$lib/hooks/useUpdateNodeInternals';
|
export * from '$lib/hooks/useUpdateNodeInternals';
|
||||||
export * from '$lib/hooks/useConnection';
|
export * from '$lib/hooks/useConnection';
|
||||||
export * from '$lib/hooks/useNodesEdges';
|
export * from '$lib/hooks/useNodesEdges';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
import portal from '$lib/actions/portal';
|
import portal from '$lib/actions/portal';
|
||||||
import { useStore } from '$lib/store';
|
import { useStore } from '$lib/store';
|
||||||
import { useSvelteFlow } from '$lib/hooks';
|
import { useSvelteFlow } from '$lib/hooks/useSvelteFlow';
|
||||||
|
|
||||||
import type { InternalNode } from '$lib/types';
|
import type { InternalNode } from '$lib/types';
|
||||||
import type { NodeToolbarProps } from './types';
|
import type { NodeToolbarProps } from './types';
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
}: NodeToolbarProps = $props();
|
}: NodeToolbarProps = $props();
|
||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
// const { nodes } = store;
|
|
||||||
const { getNodesBounds } = useSvelteFlow();
|
const { getNodesBounds } = useSvelteFlow();
|
||||||
const contextNodeId = getContext<string>('svelteflow__node_id');
|
const contextNodeId = getContext<string>('svelteflow__node_id');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user