diff --git a/apps/client/src/widgets/FloatingButtonsDefinitions.tsx b/apps/client/src/widgets/FloatingButtonsDefinitions.tsx index e631892cd..0c4f3243f 100644 --- a/apps/client/src/widgets/FloatingButtonsDefinitions.tsx +++ b/apps/client/src/widgets/FloatingButtonsDefinitions.tsx @@ -91,7 +91,7 @@ function SwitchSplitOrientationButton({ note, isReadOnly, isDefaultViewMode }: F function ToggleReadOnlyButton({ note, viewType, isDefaultViewMode }: FloatingButtonContext) { const [ isReadOnly, setReadOnly ] = useNoteLabelBoolean(note, "readOnly"); - const isEnabled = (note.type === "mermaid" || viewType === "geoMap") + const isEnabled = ([ "mermaid", "mindMap" ].includes(note.type) || viewType === "geoMap") && note.isContentAvailable() && isDefaultViewMode; return isEnabled && ; containerProps?: Omit, "ref">; + editable: boolean; content: MindElixirData; onChange?: () => void; } @@ -24,6 +25,7 @@ export default function MindMap({ note, ntxId }: TypeWidgetProps) { const content = VanillaMindElixir.new(NEW_TOPIC_NAME); const apiRef = useRef(null); const containerRef = useRef(null); + const [ isReadOnly ] = useNoteLabelBoolean(note, "readOnly"); const spacedUpdate = useEditorSpacedUpdate({ note, getData: async () => { @@ -97,6 +99,7 @@ export default function MindMap({ note, ntxId }: TypeWidgetProps) { apiRef={apiRef} content={content} onChange={() => spacedUpdate.scheduleUpdate()} + editable={!isReadOnly} containerProps={{ className: "mind-map-container", onKeyDown @@ -106,7 +109,7 @@ export default function MindMap({ note, ntxId }: TypeWidgetProps) { ) } -function MindElixir({ content, containerProps, apiRef: externalApiRef, onChange }: MindElixirProps) { +function MindElixir({ content, containerProps, apiRef: externalApiRef, onChange, editable }: MindElixirProps) { const containerRef = useRef(null); const apiRef = useRef(null); @@ -114,10 +117,13 @@ function MindElixir({ content, containerProps, apiRef: externalApiRef, onChange if (!containerRef.current) return; const mind = new VanillaMindElixir({ - el: containerRef.current + el: containerRef.current, + editable }); - mind.install(nodeMenu); + if (editable) { + mind.install(nodeMenu); + } mind.init(content); apiRef.current = mind; @@ -126,7 +132,7 @@ function MindElixir({ content, containerProps, apiRef: externalApiRef, onChange } return () => mind.destroy(); - }, []); + }, [ editable ]); // On change listener. useEffect(() => {