Skip to content

Commit 42fa2e1

Browse files
committed
[FIX] headers_overlay: disable interaction in read-only mode
The drag & drop to move headers, and the handle to resize headers were both enabled in read-only mode. This commit disable those. closes #7511 Task: 5182854 X-original-commit: 948c51e Signed-off-by: Rémi Rahir (rar) <rar@odoo.com> Signed-off-by: Adrien Minne (adrm) <adrm@odoo.com>
1 parent dd61247 commit 42fa2e1

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

src/components/headers_overlay/headers_overlay.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,14 @@ abstract class AbstractResizer extends Component<ResizerProps, SpreadsheetChildE
155155
this.state.waitingForMove = false;
156156
}
157157

158-
onMouseMove(ev: PointerEvent) {
159-
if (this.env.isMobile()) {
160-
return;
161-
}
162-
if (this.state.isResizing || this.state.isMoving || this.state.isSelecting) {
158+
onMouseMove(ev: MouseEvent) {
159+
if (
160+
this.env.isMobile() ||
161+
this.env.model.getters.isReadonly() ||
162+
this.state.isResizing ||
163+
this.state.isMoving ||
164+
this.state.isSelecting
165+
) {
163166
return;
164167
}
165168
this._computeHandleDisplay(ev);
@@ -232,6 +235,10 @@ abstract class AbstractResizer extends Component<ResizerProps, SpreadsheetChildE
232235
if (index < 0) {
233236
return;
234237
}
238+
if (this.env.model.getters.isReadonly()) {
239+
this._selectElement(index, false);
240+
return;
241+
}
235242
if (this.state.waitingForMove) {
236243
if (!this.env.model.getters.isGridSelectionActive()) {
237244
this._selectElement(index, false);

tests/grid/grid_overlay_component.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import {
3030
click,
3131
edgeScrollDelay,
3232
selectColumnByClicking,
33+
simulateClick,
3334
triggerMouseEvent,
3435
} from "../test_helpers/dom_helper";
3536
import { getEvaluatedCell, getSelectionAnchorCellXc } from "../test_helpers/getters_helpers";
@@ -652,6 +653,20 @@ describe("Resizer component", () => {
652653
await nextTick();
653654
expect(fixture.querySelector(".o-context-menu")).toBeFalsy();
654655
});
656+
657+
test("Can open context menu in readonly", async () => {
658+
model.updateMode("readonly");
659+
triggerMouseEvent(".o-overlay .o-col-resizer", "contextmenu", 10, 10);
660+
await nextTick();
661+
expect(fixture.querySelector(".o-menu")).toBeTruthy();
662+
});
663+
664+
test("Cannot resize a column in readonly", async () => {
665+
model.updateMode("readonly");
666+
triggerMouseEvent(".o-overlay .o-col-resizer", "mousemove", DEFAULT_CELL_WIDTH, 10);
667+
await nextTick();
668+
expect(fixture.querySelector(".o-overlay .o-col-resizer .o-handle")).toBeNull();
669+
});
655670
});
656671

657672
describe("Hide/show columns", () => {
@@ -1112,6 +1127,15 @@ describe("move selected element(s)", () => {
11121127
expect(getEvaluatedCell(model, "C1").value).toBe("c1");
11131128
expect(getEvaluatedCell(model, "D1").value).toBe("d1");
11141129
});
1130+
1131+
test("Can select a column but not move it in readonly", async () => {
1132+
model.updateMode("readonly");
1133+
await selectColumnByClicking(model, "A", {});
1134+
expect(model.getters.getActiveCols()).toEqual(new Set([0]));
1135+
1136+
await simulateClick(".o-overlay .o-col-resizer", 10, 10);
1137+
expect(fixture.querySelector(".o-overlay .o-col-resizer")?.classList).not.toContain("o-grab");
1138+
});
11151139
});
11161140

11171141
describe("move selected row(s)", () => {

0 commit comments

Comments
 (0)