@@ -11,14 +11,16 @@ import React, {
11
11
MouseEventHandler ,
12
12
useCallback ,
13
13
useContext ,
14
+ useMemo ,
14
15
useRef ,
15
16
useState ,
16
17
} from "react" ;
17
18
import ReactResizeDetector , { useResizeDetector } from "react-resize-detector" ;
18
19
import styled , { css } from "styled-components" ;
19
20
import { EllipsisTextCss } from "lowcoder-design" ;
20
21
import { draggingUtils } from "./draggingUtils" ;
21
- import { ResizeHandleAxis } from "./gridLayoutPropTypes" ;
22
+ import type { ResizeHandleAxis } from "./gridLayoutPropTypes" ;
23
+ import { isEqual } from "lodash" ;
22
24
23
25
export type DragHandleName = "w" | "e" | "nw" | "ne" | "sw" | "se" ;
24
26
type NamePos = "top" | "bottom" | "bottomInside" ;
@@ -273,7 +275,7 @@ export const CompSelectionWrapper = React.memo((props: {
273
275
}
274
276
setHover ( true ) ;
275
277
} ,
276
- [ setHover ]
278
+ [ nameDivRef . current , setHover ]
277
279
) ;
278
280
const onMouseOut = useCallback (
279
281
( e : MouseEvent < HTMLDivElement > ) => {
@@ -287,39 +289,57 @@ export const CompSelectionWrapper = React.memo((props: {
287
289
}
288
290
setHover ( false ) ;
289
291
} ,
290
- [ setHover ]
292
+ [ nameDivRef . current , setHover ]
291
293
) ;
292
294
293
- const selectableDivProps = props . isSelectable
294
- ? {
295
- onMouseOver,
296
- onMouseOut,
297
- onClick : props . onClick ,
298
- $hover : hover || undefined ,
299
- $showDashLine : editorState . showGridLines ( ) || props . hidden ,
300
- $isSelected : props . isSelected ,
301
- $isHidden : props . hidden ,
302
- }
303
- : {
304
- $hover : undefined ,
305
- $showDashLine : false ,
306
- $isSelected : false ,
307
- $isHidden : false ,
308
- } ;
295
+ const selectableDivProps = useMemo ( ( ) => {
296
+ return props . isSelectable
297
+ ? {
298
+ onMouseOver,
299
+ onMouseOut,
300
+ onClick : props . onClick ,
301
+ $hover : hover || undefined ,
302
+ $showDashLine : editorState . showGridLines ( ) || props . hidden ,
303
+ $isSelected : props . isSelected ,
304
+ $isHidden : props . hidden ,
305
+ }
306
+ : {
307
+ $hover : undefined ,
308
+ $showDashLine : false ,
309
+ $isSelected : false ,
310
+ $isHidden : false ,
311
+ } ;
312
+ } , [
313
+ hover ,
314
+ props . hidden ,
315
+ props . isSelected ,
316
+ props . isSelectable ,
317
+ ] ) ;
318
+
319
+ const zIndex = useMemo ( ( ) => {
320
+ return props . isSelected
321
+ ? Layers . compSelected
322
+ : hover
323
+ ? Layers . compHover
324
+ : props . hidden
325
+ ? Layers . compHidden
326
+ : undefined ;
327
+ } , [
328
+ hover ,
329
+ props . hidden ,
330
+ props . isSelected
331
+ ] ) ;
309
332
310
- const zIndex = props . isSelected
311
- ? Layers . compSelected
312
- : hover
313
- ? Layers . compHover
314
- : props . hidden
315
- ? Layers . compHidden
316
- : undefined ;
333
+ const needResizeDetector = useMemo ( ( ) => {
334
+ return props . autoHeight && ! props . placeholder ;
335
+ } , [ props . autoHeight , props . placeholder ] ) ;
317
336
318
- const needResizeDetector = props . autoHeight && ! props . placeholder ;
319
337
const { ref : wrapperRef } = useResizeDetector ( {
320
338
onResize : props . onWrapperResize ,
321
339
handleHeight : needResizeDetector ,
322
340
handleWidth : false ,
341
+ refreshMode : 'debounce' ,
342
+ refreshRate : 100 ,
323
343
} ) ;
324
344
// log.debug("CompSelectionWrapper. name: ", props.name, " zIndex: ", zIndex);
325
345
const { nameConfig, resizeIconSize } = props ;
@@ -369,8 +389,18 @@ export const CompSelectionWrapper = React.memo((props: {
369
389
{ ! needResizeDetector && props . children }
370
390
{ needResizeDetector && (
371
391
< ReactResizeDetector
392
+ skipOnMount = {
393
+ props . compType === 'responsiveLayout'
394
+ || props . compType === 'columnLayout'
395
+ || props . compType === 'pageLayout'
396
+ || props . compType === 'splitLayout'
397
+ || props . compType === 'floatTextContainer'
398
+ || props . compType === 'tabbedContainer'
399
+ || props . compType === 'collapsibleContainer'
400
+ || props . compType === 'container'
401
+ }
372
402
refreshMode = "debounce"
373
- refreshRate = { 250 }
403
+ refreshRate = { 100 }
374
404
onResize = { props . onInnerResize }
375
405
observerOptions = { { box : "border-box" } }
376
406
>
@@ -380,4 +410,4 @@ export const CompSelectionWrapper = React.memo((props: {
380
410
</ SelectableDiv >
381
411
</ div >
382
412
) ;
383
- } ) ;
413
+ } , ( prev , next ) => isEqual ( prev , next ) ) ;
0 commit comments