1
- import { MouseEvent , RefObject , useCallback , useEffect , useRef , useState } from 'react' ;
1
+ import { MouseEvent , RefObject , useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
2
2
import { TMonitor , useDrag , useDrop } from 'react-use-drag-and-drop' ;
3
3
import { useObserver , useObserverValue } from 'react-observing' ;
4
4
import { useFrame } from 'react-frame-component' ;
@@ -35,6 +35,7 @@ export const Edit = ({ element, parents, onMouseOver, onMouseLeave, onSelect, on
35
35
const name = useObserverValue ( element . name ) ;
36
36
const id = useObserverValue ( element . id ) ;
37
37
38
+ const { onExpressionToValue, onValueToExpression } = useUiEditorContext ( ) ;
38
39
const { onDragStart, onDragEnd } = useUiEditorContext ( ) ;
39
40
const { hideInsertBar } = useInsertBar ( ) ;
40
41
const { selectedId } = useSelectBar ( ) ;
@@ -59,7 +60,7 @@ export const Edit = ({ element, parents, onMouseOver, onMouseLeave, onSelect, on
59
60
value : selectedId ,
60
61
matchWidthValue : element ?. id ,
61
62
effect : ( ) => onSelectBar ( element , elementRef . current ) ,
62
- } , [ selectedId , element , text ] ) ;
63
+ } , [ selectedId , element ] ) ;
63
64
64
65
65
66
const { isDragging, preview } = useDrag < TDraggableElement > ( {
@@ -105,22 +106,27 @@ export const Edit = ({ element, parents, onMouseOver, onMouseLeave, onSelect, on
105
106
e . stopPropagation ( ) ;
106
107
107
108
if ( e . code === 'Escape' || e . code === 'Enter' || e . code === 'NumpadEnter' ) {
108
- setEditable ( false ) ;
109
+ e . currentTarget . blur ( ) ;
109
110
onSelectBar ( element , e . currentTarget )
110
111
}
111
112
} , [ onSelectBar , element ] ) ;
112
113
113
114
const handleBlur = useCallback ( ( e : React . FocusEvent < HTMLSpanElement > ) => {
114
115
setEditable ( false ) ;
115
- setText ( e . currentTarget . innerText ) ;
116
+ setText ( String ( onValueToExpression ( e . currentTarget . innerText , 'text' , 'textContent' , element ) ) ) ;
116
117
onSelectBar ( element , e . currentTarget )
117
- } , [ onSelectBar , element ] ) ;
118
+ } , [ onSelectBar , onValueToExpression , element ] ) ;
119
+
120
+
121
+ const renderedText = useMemo ( ( ) => {
122
+ return onExpressionToValue ( text , 'text' , 'textContent' , element ) ?? '' ;
123
+ } , [ text , onExpressionToValue , element ] ) ;
118
124
119
125
120
126
return (
121
127
< span
122
128
contentEditable = { editable }
123
- dangerouslySetInnerHTML = { { __html : text } }
129
+ dangerouslySetInnerHTML = { { __html : renderedText } }
124
130
125
131
onBlur = { handleBlur }
126
132
onFocus = { handleFocus }
0 commit comments