@@ -12,9 +12,10 @@ import {useSharedEditingState} from 'src/react-utils/useSharedEditingState';
1212import { cn } from '../../../../classname' ;
1313import { TextAreaFixed as TextArea } from '../../../../forms/TextInput' ;
1414import { i18n } from '../../../../i18n/common' ;
15- import { useBooleanState , useElementState } from '../../../../react-utils' ;
15+ import { useAutoSave , useBooleanState , useElementState } from '../../../../react-utils' ;
1616import { removeNode } from '../../../../utils' ;
1717import { MermaidConsts } from '../MermaidSpecs/const' ;
18+ import type { MermaidOptions } from '../index' ;
1819import type { MermaidEntitySharedState } from '../types' ;
1920
2021export const cnMermaid = cn ( 'Mermaid' ) ;
@@ -68,22 +69,26 @@ const DiagramEditMode: React.FC<{
6869 mermaidInstance : Mermaid | null ;
6970 onSave : ( v : string ) => void ;
7071 onCancel : ( ) => void ;
71- } > = ( { initialText, onSave, onCancel, mermaidInstance} ) => {
72- const [ text , setText ] = useState ( initialText || '' ) ;
72+ options : MermaidOptions ;
73+ } > = ( { initialText, onSave, onCancel, mermaidInstance, options : { autoSave} } ) => {
74+ const { value, handleChange, handleManualSave, isSaveDisabled} = useAutoSave ( {
75+ initialValue : initialText || '' ,
76+ onSave,
77+ onClose : onCancel ,
78+ autoSave,
79+ } ) ;
7380
7481 return (
7582 < div className = { b ( ) } >
76- < MermaidPreview mermaidInstance = { mermaidInstance } text = { text } />
83+ < MermaidPreview mermaidInstance = { mermaidInstance } text = { value } />
7784 < div className = { b ( 'Editor' ) } >
7885 < div >
7986 < TextArea
8087 controlProps = { {
8188 className : STOP_EVENT_CLASSNAME ,
8289 } }
83- value = { text }
84- onUpdate = { ( v ) => {
85- setText ( v ) ;
86- } }
90+ value = { value }
91+ onUpdate = { handleChange }
8792 autoFocus
8893 />
8994 </ div >
@@ -92,7 +97,11 @@ const DiagramEditMode: React.FC<{
9297 < Button onClick = { onCancel } view = { 'flat' } >
9398 < span className = { STOP_EVENT_CLASSNAME } > { i18n ( 'cancel' ) } </ span >
9499 </ Button >
95- < Button onClick = { ( ) => onSave ( text ) } view = { 'action' } >
100+ < Button
101+ onClick = { handleManualSave }
102+ view = { 'action' }
103+ disabled = { isSaveDisabled }
104+ >
96105 < span className = { STOP_EVENT_CLASSNAME } > { i18n ( 'save' ) } </ span >
97106 </ Button >
98107 </ div >
@@ -108,7 +117,8 @@ export const MermaidView: React.FC<{
108117 getMermaidInstance : ( ) => Mermaid ;
109118 node : Node ;
110119 getPos : ( ) => number | undefined ;
111- } > = ( { onChange, node, getPos, view, getMermaidInstance} ) => {
120+ options : MermaidOptions ;
121+ } > = ( { onChange, node, getPos, view, getMermaidInstance, options} ) => {
112122 const enitityId : string = node . attrs [ MermaidConsts . NodeAttrs . EntityId ] ;
113123 const entityKey = useMemo (
114124 ( ) => SharedStateKey . define < MermaidEntitySharedState > ( { name : enitityId } ) ,
@@ -144,8 +154,8 @@ export const MermaidView: React.FC<{
144154 onCancel = { unsetEditing }
145155 onSave = { ( v ) => {
146156 onChange ( { [ MermaidConsts . NodeAttrs . content ] : v } ) ;
147- unsetEditing ( ) ;
148157 } }
158+ options = { options }
149159 />
150160 ) ;
151161 }
0 commit comments