From ab3a5a97004dba783f85ec433ad783b87c0b9e80 Mon Sep 17 00:00:00 2001 From: dextmorgn Date: Tue, 4 Feb 2025 19:48:04 +0100 Subject: [PATCH] feat: on node click --- src/components/investigations/graph.tsx | 19 +++++++++++++++++++ .../investigations/individual-modal.tsx | 5 ++--- .../investigations/nodes/individual.tsx | 19 +++---------------- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/components/investigations/graph.tsx b/src/components/investigations/graph.tsx index e653374..4fec00f 100644 --- a/src/components/investigations/graph.tsx +++ b/src/components/investigations/graph.tsx @@ -25,6 +25,7 @@ import { AlignCenterHorizontal, AlignCenterVertical, MaximizeIcon, RotateCcwIcon import { useTheme } from 'next-themes'; import NewActions from './new-actions'; import { IconButton, Tooltip, Spinner } from '@radix-ui/themes'; +import { usePathname, useSearchParams, useRouter } from 'next/navigation'; const nodeTypes = { individual: IndividualNode, phone: PhoneNode, ip: IpNode, email: EmailNode, social: SocialNode }; const edgeTypes = { @@ -63,8 +64,19 @@ const LayoutFlow = ({ initialNodes, initialEdges, theme }: { initialNodes: any, const { fitView, zoomIn, zoomOut, addNodes } = useReactFlow(); const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + const router = useRouter() + const pathname = usePathname() + const searchParams = useSearchParams() const ref = useRef(null); + const createQueryString = useCallback( + (name: string, value: string) => { + const params = new URLSearchParams(searchParams.toString()) + params.set(name, value) + return params.toString() + }, + [searchParams] + ) const onLayout = useCallback( (direction: any) => { const layouted = getLayoutedElements(nodes, edges, { direction }); @@ -90,6 +102,9 @@ const LayoutFlow = ({ initialNodes, initialEdges, theme }: { initialNodes: any, onLayout('LR') }, [initialEdges]) + const handleOpenIndividualModal = (id: string) => router.push(pathname + '?' + createQueryString('individual_id', id)) + + return (
{ + if (node.type !== "individual") return + handleOpenIndividualModal(node.id); + }} fitView proOptions={{ hideAttribution: true diff --git a/src/components/investigations/individual-modal.tsx b/src/components/investigations/individual-modal.tsx index 1c79072..4535cf6 100644 --- a/src/components/investigations/individual-modal.tsx +++ b/src/components/investigations/individual-modal.tsx @@ -137,7 +137,7 @@ const IndividualModal = () => { handleFieldChange(index, e.target.value, setEmails)} + onChange={(e) => handleFieldChange(index as any, e.target.value, setEmails)} placeholder="Email" type="email" disabled={!editMode} @@ -147,7 +147,7 @@ const IndividualModal = () => { handleRemoveField(index, setEmails)} + onClick={() => handleRemoveField(index as any, setEmails)} aria-label="Remove email" > @@ -189,7 +189,6 @@ const IndividualModal = () => { )} - { - const params = new URLSearchParams(searchParams.toString()) - params.set(name, value) - return params.toString() - }, - [searchParams] - ) - const handleOpenIndividualModal = () => router.push(pathname + '?' + createQueryString('individual_id', data.id)) return ( <> - {settings.showNodeLabel ? + {settings.showNodeLabel ? : -