1
- import { useRef , useState } from "react" ;
1
+ import { useMemo , useRef , useState } from "react" ;
2
2
import { Button , Popover , Input , ColorPicker } from "@douyinfe/semi-ui" ;
3
3
import { IconEdit , IconDeleteStroked } from "@douyinfe/semi-icons" ;
4
4
import { Tab , Action , ObjectType , State } from "../../data/constants" ;
@@ -30,7 +30,8 @@ export default function Area({
30
30
const { layout } = useLayout ( ) ;
31
31
const { settings } = useSettings ( ) ;
32
32
const { setSaveState } = useSaveState ( ) ;
33
- const { selectedElement, setSelectedElement } = useSelect ( ) ;
33
+ const { selectedElement, setSelectedElement, bulkSelectedElements } =
34
+ useSelect ( ) ;
34
35
35
36
const handleResize = ( e , dir ) => {
36
37
setResize ( { id : data . id , dir : dir } ) ;
@@ -82,11 +83,21 @@ export default function Area({
82
83
setSaveState ( State . SAVING ) ;
83
84
} ;
84
85
85
- const areaIsSelected = ( ) =>
86
+ const areaIsOpen = ( ) =>
86
87
selectedElement . element === ObjectType . AREA &&
87
88
selectedElement . id === data . id &&
88
89
selectedElement . open ;
89
90
91
+ const isSelected = useMemo ( ( ) => {
92
+ return (
93
+ ( selectedElement . id === data . id &&
94
+ selectedElement . element === ObjectType . AREA ) ||
95
+ bulkSelectedElements . some (
96
+ ( e ) => e . type === ObjectType . AREA && e . id === data . id ,
97
+ )
98
+ ) ;
99
+ } , [ selectedElement , data , bulkSelectedElements ] ) ;
100
+
90
101
return (
91
102
< g ref = { ref } >
92
103
< foreignObject
@@ -101,8 +112,7 @@ export default function Area({
101
112
className = { `w-full h-full p-2 rounded cursor-move border-2 ${
102
113
isHovered
103
114
? "border-dashed border-blue-500"
104
- : selectedElement . element === ObjectType . AREA &&
105
- selectedElement . id === data . id
115
+ : isSelected
106
116
? "border-blue-500 opacity-100"
107
117
: "border-slate-400 opacity-100"
108
118
} `}
@@ -112,9 +122,9 @@ export default function Area({
112
122
< div className = "text-color select-none overflow-hidden text-ellipsis" >
113
123
{ data . name }
114
124
</ div >
115
- { ( isHovered || ( areaIsSelected ( ) && ! layout . sidebar ) ) && (
125
+ { ( isHovered || ( areaIsOpen ( ) && ! layout . sidebar ) ) && (
116
126
< Popover
117
- visible = { areaIsSelected ( ) && ! layout . sidebar }
127
+ visible = { areaIsOpen ( ) && ! layout . sidebar }
118
128
onClickOutSide = { onClickOutSide }
119
129
stopPropagation
120
130
content = { < EditPopoverContent data = { data } /> }
0 commit comments