refactor(on-before-delete): async
This commit is contained in:
@@ -47,9 +47,10 @@ const onEdgeMouseEnter = (_: ReactMouseEvent, edge: Edge) => console.log('edge m
|
|||||||
const onEdgeMouseMove = (_: ReactMouseEvent, edge: Edge) => console.log('edge mouse move', edge);
|
const onEdgeMouseMove = (_: ReactMouseEvent, edge: Edge) => console.log('edge mouse move', edge);
|
||||||
const onEdgeMouseLeave = (_: ReactMouseEvent, edge: Edge) => console.log('edge mouse leave', edge);
|
const onEdgeMouseLeave = (_: ReactMouseEvent, edge: Edge) => console.log('edge mouse leave', edge);
|
||||||
const onEdgeDoubleClick = (_: ReactMouseEvent, edge: Edge) => console.log('edge double click', edge);
|
const onEdgeDoubleClick = (_: ReactMouseEvent, edge: Edge) => console.log('edge double click', edge);
|
||||||
const onBeforeDelete: OnBeforeDelete = ({ nodes, edges }) => {
|
const onBeforeDelete: OnBeforeDelete = async ({ nodes, edges }) => {
|
||||||
console.log('on before delete', nodes, edges);
|
console.log('on before delete', nodes, edges);
|
||||||
return true;
|
const deleteElements = confirm('Do you want to remove the selected elements?');
|
||||||
|
return deleteElements;
|
||||||
};
|
};
|
||||||
const onDelete: OnDelete = ({ nodes, edges }) => console.log('on delete', nodes, edges);
|
const onDelete: OnDelete = ({ nodes, edges }) => console.log('on delete', nodes, edges);
|
||||||
const onPaneMouseMove = (e: ReactMouseEvent) => console.log('pane move', e.clientX, e.clientY);
|
const onPaneMouseMove = (e: ReactMouseEvent) => console.log('pane move', e.clientX, e.clientY);
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ const ValidationFlow = () => {
|
|||||||
[setEdges]
|
[setEdges]
|
||||||
);
|
);
|
||||||
|
|
||||||
const onBeforeDelete: OnBeforeDelete = useCallback(() => {
|
const onBeforeDelete: OnBeforeDelete = useCallback(async () => {
|
||||||
return true;
|
return true;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|||||||
@@ -177,9 +177,10 @@
|
|||||||
}}
|
}}
|
||||||
on:selectionclick={(event) => console.log('on selection click', event)}
|
on:selectionclick={(event) => console.log('on selection click', event)}
|
||||||
on:selectioncontextmenu={(event) => console.log('on selection contextmenu', event)}
|
on:selectioncontextmenu={(event) => console.log('on selection contextmenu', event)}
|
||||||
onbeforedelete={({ nodes, edges }) => {
|
onbeforedelete={async ({ nodes, edges }) => {
|
||||||
console.log('on before delete', nodes, edges);
|
console.log('on before delete', nodes, edges);
|
||||||
return true;
|
const deleteElements = confirm('Are you sure you want to delete the selected elements?');
|
||||||
|
return deleteElements;
|
||||||
}}
|
}}
|
||||||
autoPanOnConnect
|
autoPanOnConnect
|
||||||
autoPanOnNodeDrag
|
autoPanOnNodeDrag
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ export default function useReactFlow<NodeType extends Node = Node, EdgeType exte
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const deleteElements = useCallback<Instance.DeleteElements>(
|
const deleteElements = useCallback<Instance.DeleteElements>(
|
||||||
({ nodes: nodesToRemove = [], edges: edgesToRemove = [], onBeforeDelete }) => {
|
async ({ nodes: nodesToRemove = [], edges: edgesToRemove = [], onBeforeDelete }) => {
|
||||||
const {
|
const {
|
||||||
nodes,
|
nodes,
|
||||||
edges,
|
edges,
|
||||||
@@ -130,7 +130,7 @@ export default function useReactFlow<NodeType extends Node = Node, EdgeType exte
|
|||||||
onEdgesChange,
|
onEdgesChange,
|
||||||
onDelete,
|
onDelete,
|
||||||
} = store.getState();
|
} = store.getState();
|
||||||
const { nodes: matchingNodes, edges: matchingEdges } = getElementsToRemove({
|
const { nodes: matchingNodes, edges: matchingEdges } = await getElementsToRemove({
|
||||||
nodesToRemove,
|
nodesToRemove,
|
||||||
edgesToRemove,
|
edgesToRemove,
|
||||||
nodes,
|
nodes,
|
||||||
|
|||||||
@@ -32,10 +32,10 @@ export namespace Instance {
|
|||||||
NodeType,
|
NodeType,
|
||||||
EdgeType
|
EdgeType
|
||||||
>;
|
>;
|
||||||
export type DeleteElements = (params: DeleteElementsOptions) => {
|
export type DeleteElements = (params: DeleteElementsOptions) => Promise<{
|
||||||
deletedNodes: Node[];
|
deletedNodes: Node[];
|
||||||
deletedEdges: Edge[];
|
deletedEdges: Edge[];
|
||||||
};
|
}>;
|
||||||
export type GetIntersectingNodes<NodeType extends Node = Node> = (
|
export type GetIntersectingNodes<NodeType extends Node = Node> = (
|
||||||
node: NodeType | { id: Node['id'] } | Rect,
|
node: NodeType | { id: Node['id'] } | Rect,
|
||||||
partially?: boolean,
|
partially?: boolean,
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export function useSvelteFlow(): {
|
|||||||
nodesToRemove?: (Node | { id: Node['id'] })[],
|
nodesToRemove?: (Node | { id: Node['id'] })[],
|
||||||
edgesToRemove?: (Edge | { id: Edge['id'] })[],
|
edgesToRemove?: (Edge | { id: Edge['id'] })[],
|
||||||
onBeforeDelete?: OnBeforeDelete
|
onBeforeDelete?: OnBeforeDelete
|
||||||
) => { deletedNodes: Node[]; deletedEdges: Edge[] };
|
) => Promise<{ deletedNodes: Node[]; deletedEdges: Edge[] }>;
|
||||||
screenToFlowPosition: (position: XYPosition) => XYPosition;
|
screenToFlowPosition: (position: XYPosition) => XYPosition;
|
||||||
flowToScreenPosition: (position: XYPosition) => XYPosition;
|
flowToScreenPosition: (position: XYPosition) => XYPosition;
|
||||||
viewport: Writable<Viewport>;
|
viewport: Writable<Viewport>;
|
||||||
@@ -201,12 +201,12 @@ export function useSvelteFlow(): {
|
|||||||
|
|
||||||
return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;
|
return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;
|
||||||
},
|
},
|
||||||
deleteElements: (
|
deleteElements: async (
|
||||||
nodesToRemove: (Node | { id: Node['id'] })[] = [],
|
nodesToRemove: (Node | { id: Node['id'] })[] = [],
|
||||||
edgesToRemove: (Edge | { id: Edge['id'] })[] = [],
|
edgesToRemove: (Edge | { id: Edge['id'] })[] = [],
|
||||||
onBeforeDelete?: OnBeforeDelete
|
onBeforeDelete?: OnBeforeDelete
|
||||||
) => {
|
) => {
|
||||||
const { nodes: matchingNodes, edges: matchingEdges } = getElementsToRemove({
|
const { nodes: matchingNodes, edges: matchingEdges } = await getElementsToRemove({
|
||||||
nodesToRemove,
|
nodesToRemove,
|
||||||
edgesToRemove,
|
edgesToRemove,
|
||||||
nodes: get(nodes),
|
nodes: get(nodes),
|
||||||
|
|||||||
@@ -208,14 +208,14 @@ export function createStore({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
store.deleteKeyPressed.subscribe((deleteKeyPressed) => {
|
store.deleteKeyPressed.subscribe(async (deleteKeyPressed) => {
|
||||||
if (deleteKeyPressed) {
|
if (deleteKeyPressed) {
|
||||||
const nodes = get(store.nodes);
|
const nodes = get(store.nodes);
|
||||||
const edges = get(store.edges);
|
const edges = get(store.edges);
|
||||||
const selectedNodes = nodes.filter((node) => node.selected);
|
const selectedNodes = nodes.filter((node) => node.selected);
|
||||||
const selectedEdges = edges.filter((edge) => edge.selected);
|
const selectedEdges = edges.filter((edge) => edge.selected);
|
||||||
|
|
||||||
const { nodes: matchingNodes, edges: matchingEdges } = getElementsToRemove({
|
const { nodes: matchingNodes, edges: matchingEdges } = await getElementsToRemove({
|
||||||
nodesToRemove: selectedNodes,
|
nodesToRemove: selectedNodes,
|
||||||
edgesToRemove: selectedEdges,
|
edgesToRemove: selectedEdges,
|
||||||
nodes,
|
nodes,
|
||||||
|
|||||||
@@ -148,4 +148,4 @@ export type OnBeforeDelete = <NodeType extends NodeBase = NodeBase, EdgeType ext
|
|||||||
}: {
|
}: {
|
||||||
nodes: NodeType[];
|
nodes: NodeType[];
|
||||||
edges: EdgeType[];
|
edges: EdgeType[];
|
||||||
}) => boolean | { nodes: NodeType[]; edges: EdgeType[] };
|
}) => Promise<boolean | { nodes: NodeType[]; edges: EdgeType[] }>;
|
||||||
|
|||||||
@@ -336,7 +336,7 @@ export function calcNextPosition<NodeType extends NodeBase>(
|
|||||||
* @param param.onBeforeDelete - Callback to check which nodes and edges can be deleted
|
* @param param.onBeforeDelete - Callback to check which nodes and edges can be deleted
|
||||||
* @returns nodes: nodes that can be deleted, edges: edges that can be deleted
|
* @returns nodes: nodes that can be deleted, edges: edges that can be deleted
|
||||||
*/
|
*/
|
||||||
export function getElementsToRemove<NodeType extends NodeBase = NodeBase, EdgeType extends EdgeBase = EdgeBase>({
|
export async function getElementsToRemove<NodeType extends NodeBase = NodeBase, EdgeType extends EdgeBase = EdgeBase>({
|
||||||
nodesToRemove = [],
|
nodesToRemove = [],
|
||||||
edgesToRemove = [],
|
edgesToRemove = [],
|
||||||
nodes,
|
nodes,
|
||||||
@@ -348,10 +348,10 @@ export function getElementsToRemove<NodeType extends NodeBase = NodeBase, EdgeTy
|
|||||||
nodes: NodeType[];
|
nodes: NodeType[];
|
||||||
edges: EdgeType[];
|
edges: EdgeType[];
|
||||||
onBeforeDelete?: OnBeforeDelete;
|
onBeforeDelete?: OnBeforeDelete;
|
||||||
}): {
|
}): Promise<{
|
||||||
nodes: NodeType[];
|
nodes: NodeType[];
|
||||||
edges: EdgeType[];
|
edges: EdgeType[];
|
||||||
} {
|
}> {
|
||||||
const nodeIds = nodesToRemove.map((node) => node.id);
|
const nodeIds = nodesToRemove.map((node) => node.id);
|
||||||
const matchingNodes: NodeType[] = [];
|
const matchingNodes: NodeType[] = [];
|
||||||
|
|
||||||
@@ -388,7 +388,7 @@ export function getElementsToRemove<NodeType extends NodeBase = NodeBase, EdgeTy
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const onBeforeDeleteResult = onBeforeDelete({
|
const onBeforeDeleteResult = await onBeforeDelete({
|
||||||
nodes: matchingNodes,
|
nodes: matchingNodes,
|
||||||
edges: matchingEdges,
|
edges: matchingEdges,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user