Skip to content

Commit ea11ae7

Browse files
committed
added group actions on region section
1 parent 572da5f commit ea11ae7

File tree

2 files changed

+106
-7
lines changed

2 files changed

+106
-7
lines changed

client/src/RegionSelectorSidebarBox/RegionSelectorSidebarBox.test.js

+42-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe("RegionSelectorSidebarBox", () => {
88
{
99
id: "1",
1010
color: "#ff0000",
11-
locked: false,
11+
locked: true,
1212
visible: true,
1313
minimized: false,
1414
name: "Region 1",
@@ -19,7 +19,7 @@ describe("RegionSelectorSidebarBox", () => {
1919
id: "2",
2020
color: "#00ff00",
2121
locked: true,
22-
visible: false,
22+
visible: true,
2323
minimized: true,
2424
name: "Region 2",
2525
highlighted: true,
@@ -96,4 +96,44 @@ describe("RegionSelectorSidebarBox", () => {
9696
});
9797
});
9898

99+
it("calls onChangeRegion when the visibility icon in the header is clicked", () => {
100+
const visibleIconHeader = screen.getByTestId(
101+
"VisibleIcon-header"
102+
);
103+
104+
fireEvent.click(visibleIconHeader);
105+
106+
expect(mockOnChangeRegion).toHaveBeenCalledTimes(mockRegions.length);
107+
108+
mockRegions.forEach((region) => {
109+
expect(mockOnChangeRegion).toHaveBeenCalledWith({
110+
...region,
111+
visible: !region.visible,
112+
});
113+
});
114+
});
115+
116+
it("calls onChangeRegion when the lock icon in the header is clicked", () => {
117+
const lockIconHeader = screen.getByTestId(
118+
"LockIcon-header"
119+
);
120+
fireEvent.click(lockIconHeader);
121+
122+
expect(mockOnChangeRegion).toHaveBeenCalledTimes(4);
123+
mockRegions.forEach((region) => {
124+
expect(mockOnChangeRegion).toHaveBeenCalledWith({
125+
...region,
126+
locked: !region.locked,
127+
});
128+
});
129+
});
130+
131+
it("calls onDeleteRegion when the delete icon in the header is clicked", () => {
132+
const deleteIconHeader = screen.getByTestId(
133+
"DeleteIcon-header"
134+
);
135+
fireEvent.click(deleteIconHeader);
136+
expect(mockOnDeleteRegion).toHaveBeenCalledTimes(4);
137+
});
138+
99139
});

client/src/RegionSelectorSidebarBox/index.jsx

+64-5
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,10 @@ const RowLayout = ({
8181
)
8282
}
8383

84-
const RowHeader = () => {
84+
const RowHeader = ({ regions, onChangeRegion, onDeleteRegion }) => {
85+
const visible = regions.find(r => r.visible === false) == null;
86+
const locked = regions.find(r => r.locked === false) == null;
87+
console.log(visible, locked)
8588
const {t} = useTranslation();
8689
return (
8790
<RowLayout
@@ -90,9 +93,61 @@ const RowHeader = () => {
9093
order={<ReorderIcon className="icon" />}
9194
name={<div style={{paddingLeft: 10}}>{t("desc.class")}</div>}
9295
area={<PieChartIcon className="icon" />}
93-
trash={<TrashIcon className="icon" />}
94-
lock={<LockIcon className="icon" />}
95-
visible={<VisibleIcon className="icon" />}
96+
trash={
97+
<TrashIcon className="icon"
98+
onClick={() => {
99+
regions.forEach(r => {
100+
onDeleteRegion(r);
101+
});
102+
}}
103+
data-testid="DeleteIcon-header"
104+
/>}
105+
lock={
106+
locked === true ? (
107+
<LockIcon
108+
onClick={() => {
109+
regions.forEach(r => {
110+
onChangeRegion({ ...r, locked: false });
111+
});
112+
}}
113+
className="icon"
114+
data-testid="LockIcon-header"
115+
/>
116+
) : (
117+
<UnlockIcon
118+
onClick={() => {
119+
regions.forEach(r => {
120+
onChangeRegion({ ...r, locked: true });
121+
});
122+
}}
123+
className="icon"
124+
data-testid="UnlockIcon-header"
125+
/>
126+
)
127+
}
128+
visible={
129+
visible ? (
130+
<VisibleIcon
131+
onClick={() => {
132+
regions.forEach(r => {
133+
onChangeRegion({ ...r, visible: false });
134+
});
135+
}}
136+
className="icon"
137+
data-testid="VisibleIcon-header"
138+
/>
139+
) : (
140+
<VisibleOffIcon
141+
onClick={() => {
142+
regions.forEach(r => {
143+
onChangeRegion({ ...r, visible: true });
144+
});
145+
}}
146+
className="icon"
147+
data-testid="InvisibleIcon-header"
148+
/>
149+
)
150+
}
96151
/>
97152
)
98153
}
@@ -205,7 +260,11 @@ export const RegionSelectorSidebarBox = ({
205260
noScroll={true}
206261
>
207262
<ContainerDiv>
208-
<MemoRowHeader />
263+
<MemoRowHeader
264+
regions={regions}
265+
onChangeRegion={onChangeRegion}
266+
onDeleteRegion={onDeleteRegion}
267+
/>
209268
<HeaderSep />
210269
{regions.map((r, i) => (
211270
<MemoRow

0 commit comments

Comments
 (0)