Fixed filter edge and added debug consoles

This commit is contained in:
Lucas Oliveira 2023-11-28 11:05:19 -03:00
commit ee3209b579
2 changed files with 42 additions and 32 deletions

View file

@ -85,11 +85,15 @@ 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 // this effect is used to attach the global event handlers
const onKeyDown = (event: KeyboardEvent) => { const onKeyDown = (event: KeyboardEvent) => {
@ -152,28 +156,25 @@ export default function Page({
const [nodes, setNodes, onNodesChange] = useNodesState( const [nodes, setNodes, onNodesChange] = useNodesState(
flow.data?.nodes ?? [] flow.data?.nodes ?? []
); );
const [edges, setEdges, onEdgesChange] = useEdgesState( const [edges, setEdges, onEdgesChange] = useEdgesState(
flow.data?.edges ?? [] flow.data?.edges ?? []
); );
const { setViewport } = useReactFlow(); const { setViewport } = useReactFlow();
const edgeUpdateSuccessful = useRef(true); const edgeUpdateSuccessful = useRef(true);
useEffect(() => {
if (reactFlowInstance && flow) {
flow.data = reactFlowInstance.toObject();
updateFlow(flow);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [edges]);
//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, setEdges, setNodes, setViewport]); }, [flow, reactFlowInstance]);
//set extra sidebar //set extra sidebar
useEffect(() => { useEffect(() => {
console.log("3")
setExtraComponent(<ExtraSidebar />); setExtraComponent(<ExtraSidebar />);
setExtraNavigation({ title: "Components" }); setExtraNavigation({ title: "Components" });
}, [setExtraComponent, setExtraNavigation]); }, [setExtraComponent, setExtraNavigation]);
@ -181,28 +182,20 @@ export default function Page({
const [seconds, setSeconds] = useState(0); 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(() => {
setSeconds((prevSeconds) => { saveFlow(
let updatedSeconds = prevSeconds + 1; {
...flows[index]!,
if (updatedSeconds % 30 === 0) { data: reactFlowInstance
saveFlow( ? reactFlowInstance!.toObject()
{ : flow!.data,
...flows[index]!, },
data: reactFlowInstance true
? reactFlowInstance!.toObject() );
: flow!.data, }, 30000);
},
true
);
updatedSeconds = 0;
}
return updatedSeconds;
});
}, 1000);
return () => { return () => {
clearInterval(interval); clearInterval(interval);
@ -211,11 +204,12 @@ export default function Page({
const onEdgesChangeMod = useCallback( const onEdgesChangeMod = useCallback(
(change: EdgeChange[]) => { (change: EdgeChange[]) => {
onEdgesChange(change); console.log("5")
setNodes((node) => { updateFlow({
let newX = _.cloneDeep(node); ...flow!,
return newX; data: reactFlowInstance ? reactFlowInstance!.toObject() : flow!.data,
}); });
onEdgesChange(change);
//@ts-ignore //@ts-ignore
setTabsState((prev: FlowsState) => { setTabsState((prev: FlowsState) => {
return { return {
@ -232,6 +226,7 @@ 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) => {
@ -249,6 +244,7 @@ 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(
@ -280,22 +276,26 @@ 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,6 +306,7 @@ 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();
@ -382,6 +383,7 @@ export default function Page({
); );
useEffect(() => { useEffect(() => {
console.log("13")
return () => { return () => {
if (tabsState && tabsState[flow.id]?.isPending) { if (tabsState && tabsState[flow.id]?.isPending) {
saveFlow({ saveFlow({
@ -394,6 +396,7 @@ 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(
@ -408,11 +411,13 @@ 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));
@ -422,6 +427,7 @@ 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));
} }
@ -431,15 +437,18 @@ 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 {
@ -449,12 +458,14 @@ 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([]);
}, []); }, []);

View file

@ -97,7 +97,6 @@ export default function ExtraSidebar(): JSX.Element {
useEffect(() => { useEffect(() => {
if (getFilterEdge.length === 0 && search === "") { if (getFilterEdge.length === 0 && search === "") {
setFilterData(data); setFilterData(data);
setFilterEdge([]);
setSearch(""); setSearch("");
} }
}, [getFilterEdge]); }, [getFilterEdge]);