Fixed unnecessary updates
This commit is contained in:
parent
082ea5282f
commit
733e6945c6
2 changed files with 19 additions and 45 deletions
|
|
@ -418,7 +418,7 @@ export function FlowsProvider({ children }: { children: ReactNode }) {
|
||||||
|
|
||||||
const insidePosition = position.paneX
|
const insidePosition = position.paneX
|
||||||
? { x: position.paneX + position.x, y: position.paneY! + position.y }
|
? { x: position.paneX + position.x, y: position.paneY! + position.y }
|
||||||
: reactFlowInstance!.project({ x: position.x, y: position.y });
|
: reactFlowInstance!.screenToFlowPosition({ x: position.x, y: position.y });
|
||||||
|
|
||||||
selectionInstance.nodes.forEach((node: NodeType) => {
|
selectionInstance.nodes.forEach((node: NodeType) => {
|
||||||
// Generate a unique node ID
|
// Generate a unique node ID
|
||||||
|
|
|
||||||
|
|
@ -85,17 +85,11 @@ export default function Page({
|
||||||
|
|
||||||
const { takeSnapshot } = useContext(undoRedoContext);
|
const { takeSnapshot } = useContext(undoRedoContext);
|
||||||
|
|
||||||
|
|
||||||
const [position, setPosition] = useState({ x: 0, y: 0 });
|
const [position, setPosition] = useState({ x: 0, y: 0 });
|
||||||
const [lastSelection, setLastSelection] =
|
const [lastSelection, setLastSelection] =
|
||||||
useState<OnSelectionChangeParams | null>(null);
|
useState<OnSelectionChangeParams | null>(null);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("1")
|
|
||||||
// this effect is used to attach the global event handlers
|
|
||||||
|
|
||||||
const onKeyDown = (event: KeyboardEvent) => {
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
if (!isWrappedWithClass(event, "nocopy")) {
|
if (!isWrappedWithClass(event, "nocopy")) {
|
||||||
if (
|
if (
|
||||||
|
|
@ -112,10 +106,9 @@ export default function Page({
|
||||||
lastCopiedSelection
|
lastCopiedSelection
|
||||||
) {
|
) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
let bounds = reactFlowWrapper.current?.getBoundingClientRect();
|
|
||||||
paste(lastCopiedSelection, {
|
paste(lastCopiedSelection, {
|
||||||
x: position.x - bounds!.left,
|
x: position.x,
|
||||||
y: position.y - bounds!.top,
|
y: position.y,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
|
|
@ -137,18 +130,26 @@ export default function Page({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
document.addEventListener("keydown", onKeyDown);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
document.removeEventListener("keydown", onKeyDown);
|
||||||
|
};
|
||||||
|
}, [lastCopiedSelection, lastSelection]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
const handleMouseMove = (event) => {
|
const handleMouseMove = (event) => {
|
||||||
setPosition({ x: event.clientX, y: event.clientY });
|
setPosition({ x: event.clientX, y: event.clientY });
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener("keydown", onKeyDown);
|
|
||||||
document.addEventListener("mousemove", handleMouseMove);
|
document.addEventListener("mousemove", handleMouseMove);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
document.removeEventListener("keydown", onKeyDown);
|
|
||||||
document.removeEventListener("mousemove", handleMouseMove);
|
document.removeEventListener("mousemove", handleMouseMove);
|
||||||
};
|
};
|
||||||
}, [position, lastCopiedSelection, lastSelection]);
|
}, [position]);
|
||||||
|
|
||||||
const [selectionMenuVisible, setSelectionMenuVisible] = useState(false);
|
const [selectionMenuVisible, setSelectionMenuVisible] = useState(false);
|
||||||
|
|
||||||
const { setExtraComponent, setExtraNavigation } = useContext(locationContext);
|
const { setExtraComponent, setExtraNavigation } = useContext(locationContext);
|
||||||
|
|
@ -165,33 +166,21 @@ export default function Page({
|
||||||
|
|
||||||
//update flow when tabs change
|
//update flow when tabs change
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("2")
|
|
||||||
setNodes(flow?.data?.nodes ?? []);
|
setNodes(flow?.data?.nodes ?? []);
|
||||||
setEdges(flow?.data?.edges ?? []);
|
setEdges(flow?.data?.edges ?? []);
|
||||||
if (reactFlowInstance) {
|
if (reactFlowInstance) {
|
||||||
setViewport(flow?.data?.viewport ?? { x: 1, y: 0, zoom: 0.5 });
|
setViewport(flow?.data?.viewport ?? { x: 1, y: 0, zoom: 0.5 });
|
||||||
}
|
}
|
||||||
}, [flow, reactFlowInstance]);
|
}, [flow, reactFlowInstance]);
|
||||||
//set extra sidebar
|
|
||||||
useEffect(() => {
|
|
||||||
console.log("3")
|
|
||||||
setExtraComponent(<ExtraSidebar />);
|
|
||||||
setExtraNavigation({ title: "Components" });
|
|
||||||
}, [setExtraComponent, setExtraNavigation]);
|
|
||||||
|
|
||||||
const [seconds, setSeconds] = useState(0);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("4")
|
|
||||||
const index = flows.findIndex((flowId) => flowId.id === flow.id);
|
const index = flows.findIndex((flowId) => flowId.id === flow.id);
|
||||||
|
|
||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
saveFlow(
|
saveFlow(
|
||||||
{
|
{
|
||||||
...flows[index]!,
|
...flows[index]!,
|
||||||
data: reactFlowInstance
|
data: reactFlowInstance ? reactFlowInstance!.toObject() : flow!.data,
|
||||||
? reactFlowInstance!.toObject()
|
|
||||||
: flow!.data,
|
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
@ -204,8 +193,7 @@ export default function Page({
|
||||||
|
|
||||||
const onEdgesChangeMod = useCallback(
|
const onEdgesChangeMod = useCallback(
|
||||||
(change: EdgeChange[]) => {
|
(change: EdgeChange[]) => {
|
||||||
console.log("5")
|
updateFlow({
|
||||||
updateFlow({
|
|
||||||
...flow!,
|
...flow!,
|
||||||
data: reactFlowInstance ? reactFlowInstance!.toObject() : flow!.data,
|
data: reactFlowInstance ? reactFlowInstance!.toObject() : flow!.data,
|
||||||
});
|
});
|
||||||
|
|
@ -226,7 +214,6 @@ export default function Page({
|
||||||
|
|
||||||
const onNodesChangeMod = useCallback(
|
const onNodesChangeMod = useCallback(
|
||||||
(change: NodeChange[]) => {
|
(change: NodeChange[]) => {
|
||||||
console.log("6")
|
|
||||||
onNodesChange(change);
|
onNodesChange(change);
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
setTabsState((prev: FlowsState) => {
|
setTabsState((prev: FlowsState) => {
|
||||||
|
|
@ -244,7 +231,6 @@ export default function Page({
|
||||||
|
|
||||||
const onConnect = useCallback(
|
const onConnect = useCallback(
|
||||||
(params: Connection) => {
|
(params: Connection) => {
|
||||||
console.log("7")
|
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
setEdges((eds) =>
|
setEdges((eds) =>
|
||||||
addEdge(
|
addEdge(
|
||||||
|
|
@ -276,26 +262,22 @@ export default function Page({
|
||||||
);
|
);
|
||||||
|
|
||||||
const onNodeDragStart: NodeDragHandler = useCallback(() => {
|
const onNodeDragStart: NodeDragHandler = useCallback(() => {
|
||||||
console.log("8")
|
|
||||||
// 👇 make dragging a node undoable
|
// 👇 make dragging a node undoable
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
// 👉 you can place your event handlers here
|
// 👉 you can place your event handlers here
|
||||||
}, [takeSnapshot]);
|
}, [takeSnapshot]);
|
||||||
|
|
||||||
const onSelectionDragStart: SelectionDragHandler = useCallback(() => {
|
const onSelectionDragStart: SelectionDragHandler = useCallback(() => {
|
||||||
console.log("9")
|
|
||||||
// 👇 make dragging a selection undoable
|
// 👇 make dragging a selection undoable
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
}, [takeSnapshot]);
|
}, [takeSnapshot]);
|
||||||
|
|
||||||
const onEdgesDelete: OnEdgesDelete = useCallback(() => {
|
const onEdgesDelete: OnEdgesDelete = useCallback(() => {
|
||||||
console.log("10")
|
|
||||||
// 👇 make deleting edges undoable
|
// 👇 make deleting edges undoable
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
}, [takeSnapshot]);
|
}, [takeSnapshot]);
|
||||||
|
|
||||||
const onDragOver = useCallback((event: React.DragEvent) => {
|
const onDragOver = useCallback((event: React.DragEvent) => {
|
||||||
console.log("11")
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (event.dataTransfer.types.some((types) => types === "nodedata")) {
|
if (event.dataTransfer.types.some((types) => types === "nodedata")) {
|
||||||
event.dataTransfer.dropEffect = "move";
|
event.dataTransfer.dropEffect = "move";
|
||||||
|
|
@ -306,7 +288,6 @@ export default function Page({
|
||||||
|
|
||||||
const onDrop = useCallback(
|
const onDrop = useCallback(
|
||||||
(event: React.DragEvent) => {
|
(event: React.DragEvent) => {
|
||||||
console.log("12")
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (event.dataTransfer.types.some((types) => types === "nodedata")) {
|
if (event.dataTransfer.types.some((types) => types === "nodedata")) {
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
|
|
@ -383,7 +364,9 @@ export default function Page({
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("13")
|
setExtraComponent(<ExtraSidebar />);
|
||||||
|
setExtraNavigation({ title: "Components" });
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
if (tabsState && tabsState[flow.id]?.isPending) {
|
if (tabsState && tabsState[flow.id]?.isPending) {
|
||||||
saveFlow({
|
saveFlow({
|
||||||
|
|
@ -396,7 +379,6 @@ export default function Page({
|
||||||
|
|
||||||
const onDelete = useCallback(
|
const onDelete = useCallback(
|
||||||
(mynodes: Node[]) => {
|
(mynodes: Node[]) => {
|
||||||
console.log("14")
|
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
setEdges(
|
setEdges(
|
||||||
edges.filter(
|
edges.filter(
|
||||||
|
|
@ -411,13 +393,11 @@ export default function Page({
|
||||||
);
|
);
|
||||||
|
|
||||||
const onEdgeUpdateStart = useCallback(() => {
|
const onEdgeUpdateStart = useCallback(() => {
|
||||||
console.log("15")
|
|
||||||
edgeUpdateSuccessful.current = false;
|
edgeUpdateSuccessful.current = false;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const onEdgeUpdate = useCallback(
|
const onEdgeUpdate = useCallback(
|
||||||
(oldEdge: Edge, newConnection: Connection) => {
|
(oldEdge: Edge, newConnection: Connection) => {
|
||||||
console.log("16")
|
|
||||||
if (isValidConnection(newConnection, reactFlowInstance!)) {
|
if (isValidConnection(newConnection, reactFlowInstance!)) {
|
||||||
edgeUpdateSuccessful.current = true;
|
edgeUpdateSuccessful.current = true;
|
||||||
setEdges((els) => updateEdge(oldEdge, newConnection, els));
|
setEdges((els) => updateEdge(oldEdge, newConnection, els));
|
||||||
|
|
@ -427,7 +407,6 @@ export default function Page({
|
||||||
);
|
);
|
||||||
|
|
||||||
const onEdgeUpdateEnd = useCallback((_, edge: Edge): void => {
|
const onEdgeUpdateEnd = useCallback((_, edge: Edge): void => {
|
||||||
console.log("17")
|
|
||||||
if (!edgeUpdateSuccessful.current) {
|
if (!edgeUpdateSuccessful.current) {
|
||||||
setEdges((eds) => eds.filter((edg) => edg.id !== edge.id));
|
setEdges((eds) => eds.filter((edg) => edg.id !== edge.id));
|
||||||
}
|
}
|
||||||
|
|
@ -437,18 +416,15 @@ export default function Page({
|
||||||
const [selectionEnded, setSelectionEnded] = useState(true);
|
const [selectionEnded, setSelectionEnded] = useState(true);
|
||||||
|
|
||||||
const onSelectionEnd = useCallback(() => {
|
const onSelectionEnd = useCallback(() => {
|
||||||
console.log("18")
|
|
||||||
setSelectionEnded(true);
|
setSelectionEnded(true);
|
||||||
}, []);
|
}, []);
|
||||||
const onSelectionStart = useCallback((event: MouseEvent) => {
|
const onSelectionStart = useCallback((event: MouseEvent) => {
|
||||||
console.log("19")
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
setSelectionEnded(false);
|
setSelectionEnded(false);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Workaround to show the menu only after the selection has ended.
|
// Workaround to show the menu only after the selection has ended.
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("20")
|
|
||||||
if (selectionEnded && lastSelection && lastSelection.nodes.length > 1) {
|
if (selectionEnded && lastSelection && lastSelection.nodes.length > 1) {
|
||||||
setSelectionMenuVisible(true);
|
setSelectionMenuVisible(true);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -458,14 +434,12 @@ export default function Page({
|
||||||
|
|
||||||
const onSelectionChange = useCallback(
|
const onSelectionChange = useCallback(
|
||||||
(flow: OnSelectionChangeParams): void => {
|
(flow: OnSelectionChangeParams): void => {
|
||||||
console.log("21")
|
|
||||||
setLastSelection(flow);
|
setLastSelection(flow);
|
||||||
},
|
},
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
const onPaneClick = useCallback((flow) => {
|
const onPaneClick = useCallback((flow) => {
|
||||||
console.log("22")
|
|
||||||
setFilterEdge([]);
|
setFilterEdge([]);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue