From 8ee05a9a51d8adf36cb5f1be884651e0292f4be5 Mon Sep 17 00:00:00 2001 From: liliana <liliana.sanfilippo@uni-bielefeld.de> Date: Sat, 27 Jul 2024 20:39:39 +0200 Subject: [PATCH] markup mindmap --- src/components/mindmap/mindmap-hooks.tsx | 44 +++++++++++++++--------- src/components/mindmap/mindmap.ts | 6 ++-- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/components/mindmap/mindmap-hooks.tsx b/src/components/mindmap/mindmap-hooks.tsx index e3d0c389..a13d7a8b 100644 --- a/src/components/mindmap/mindmap-hooks.tsx +++ b/src/components/mindmap/mindmap-hooks.tsx @@ -1,30 +1,43 @@ + import React, { useState, useRef, useEffect } from 'react'; import { Markmap } from 'markmap-view'; import { transformer } from './mindmap'; import 'markmap-toolbar/dist/style.css'; -const initValue = `# markmap - -- beautiful -- useful -- easy -- interactive +const initValue = `# Stakeholders +- Patients + - hi +- Industry +- Academia +- Medical Professionals `; - - export default function MarkmapHooks() { - const [value, setValue] = useState(initValue); + const [value] = useState(initValue); // Ref for SVG element - const refSvg = useRef<SVGSVGElement>(); + const refSvg = useRef<SVGSVGElement>(null); // Initialize with null // Ref for markmap object - const refMm = useRef<Markmap>(); + const refMm = useRef<Markmap | null>(null); // Initialize with null useEffect(() => { // Create markmap and save to refMm - if (refMm.current) return; + if (refMm.current || !refSvg.current) return; // Add null check const mm = Markmap.create(refSvg.current); refMm.current = mm; + + // Add double-click event listener to prevent zoom + const svgElement = refSvg.current; + if (svgElement) { + const handleDoubleClick = (event: MouseEvent) => { + event.preventDefault(); + }; + svgElement.addEventListener('dblclick', handleDoubleClick); + + // Cleanup event listener on unmount + return () => { + svgElement.removeEventListener('dblclick', handleDoubleClick); + }; + } }, [refSvg.current]); useEffect(() => { @@ -33,15 +46,12 @@ export default function MarkmapHooks() { if (!mm) return; const { root } = transformer.transform(value); mm.setData(root); - mm.fit(); + mm.fit(); }, [refMm.current, value]); - - return ( <React.Fragment> - <div className="flex-1"> - </div> + <div className="flex-1"></div> <svg className="flex-1" ref={refSvg} /> </React.Fragment> ); diff --git a/src/components/mindmap/mindmap.ts b/src/components/mindmap/mindmap.ts index 2e4aeb1c..bb0321b4 100644 --- a/src/components/mindmap/mindmap.ts +++ b/src/components/mindmap/mindmap.ts @@ -3,5 +3,7 @@ import { Transformer } from 'markmap-lib'; export const transformer = new Transformer(); const { scripts, styles } = transformer.getAssets(); -loadCSS(styles); -loadJS(scripts); + +// Provide default empty array if styles or scripts are undefined +loadCSS(styles ?? []); +loadJS(scripts ?? []); -- GitLab