From 847f12b1efaa6c163d202aea571c931cd960f37e Mon Sep 17 00:00:00 2001 From: Brey Rivera Date: Mon, 31 Mar 2025 18:25:49 -0400 Subject: [PATCH 1/2] modify archive logic --- frontend/src/components/TopologyCard.tsx | 15 ++-- .../src/components/TopologyDetailCard.tsx | 80 +++++++++++++------ 2 files changed, 61 insertions(+), 34 deletions(-) diff --git a/frontend/src/components/TopologyCard.tsx b/frontend/src/components/TopologyCard.tsx index aa941c9..943b543 100644 --- a/frontend/src/components/TopologyCard.tsx +++ b/frontend/src/components/TopologyCard.tsx @@ -1,5 +1,5 @@ import { Topology } from 'common'; -import { Image, Trash } from "lucide-react"; +import { Archive, Image, Trash } from "lucide-react"; import React, { useEffect, useState } from 'react'; import { useNavigate } from "react-router-dom"; import { useAuth } from "../hooks/useAuth.ts"; @@ -21,7 +21,6 @@ const TopologyCard: React.FC = ({ onDelete, onArchive, readOnly, - userId }) => { const { menuOpen, hideMenu } = useContextMenu(); const { user } = useAuth(); @@ -29,7 +28,6 @@ const TopologyCard: React.FC = ({ const [thumbnailSrc, setThumbnailSrc] = useState(null); const [archived, setArchived] = useState(initialArchived); const [isModalOpen, setIsModalOpen] = useState(false); - const ownsTopology = user?.id === userId; const handleClick = (event: React.MouseEvent) => { if (archived) return; @@ -87,9 +85,9 @@ const TopologyCard: React.FC = ({ return (
= ({

{archived ? "Archived" : "Active"} diff --git a/frontend/src/components/TopologyDetailCard.tsx b/frontend/src/components/TopologyDetailCard.tsx index 80be032..68e5802 100644 --- a/frontend/src/components/TopologyDetailCard.tsx +++ b/frontend/src/components/TopologyDetailCard.tsx @@ -1,7 +1,6 @@ import { Topology } from 'common'; -import { Trash } from "lucide-react"; -import React, { useState } from 'react'; -import { useAuth } from "../hooks/useAuth.ts"; +import { Image, Trash } from "lucide-react"; +import React, { useEffect, useState } from 'react'; import DeletionModal from "./DeletionModal.tsx"; interface TopologyProps extends Topology { @@ -13,28 +12,18 @@ interface TopologyProps extends Topology { const TopologyDetailCard: React.FC = ({ id, name, - archived: initialArchived, + archived, updatedAt, onDelete, - onArchive, - userId, + thumbnail, reactFlowState }) => { - const { user } = useAuth(); - const [archived, setArchived] = useState(initialArchived); + const [thumbnailSrc, setThumbnailSrc] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); - const ownsTopology = user?.id === userId; // get the devices on the topology const devicesUsedInTopology = reactFlowState?.nodes.map(n => n.id); - // toggle the archive state - const toggleArchived = (event: React.MouseEvent) => { - event.stopPropagation(); - setArchived(!archived); - onArchive(id); - }; - const handleDeleteClick = (e: React.MouseEvent) => { e.stopPropagation(); setIsModalOpen(true); @@ -45,6 +34,30 @@ const TopologyDetailCard: React.FC = ({ setIsModalOpen(false); }; + // handle conversion of thumbnail + useEffect(() => { + if (!thumbnail) return; + try { + // convert the object to a Uint8Array + const byteArray = new Uint8Array(Object.values(thumbnail)); + + // convert Uint8Array to binary string + const binaryString = Array.from(byteArray) + .map(byte => String.fromCharCode(byte)) + .join(''); + + // convert binary string to base64 + const base64String = btoa(binaryString); + // check if empty + if (base64String !== "AA==") { + const thumbnailSourceString = `data:image/jpg;base64,${base64String}`; + setThumbnailSrc(thumbnailSourceString); + } + } catch (error) { + console.error('Error converting to base64:', error); + } + }, [thumbnail]); + return (
From 9df05bb7498755a44660a48b9d9f37bcbc6f8bce Mon Sep 17 00:00:00 2001 From: Brey Rivera Date: Mon, 31 Mar 2025 18:29:39 -0400 Subject: [PATCH 2/2] add snap to grid --- frontend/src/components/reactflow/TopologyCanvas.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/reactflow/TopologyCanvas.tsx b/frontend/src/components/reactflow/TopologyCanvas.tsx index 7425ec6..68c3e1b 100644 --- a/frontend/src/components/reactflow/TopologyCanvas.tsx +++ b/frontend/src/components/reactflow/TopologyCanvas.tsx @@ -329,6 +329,7 @@ const TopologyCanvas = () => { selectionMode={SelectionMode.Partial} onPaneClick={onPaneClick} onNodeContextMenu={onNodeContextMenu} + snapToGrid={true} > {menu && (