Skip to content

Commit a5ecb75

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 #7512 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 98073f1 commit a5ecb75

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
@@ -150,14 +150,17 @@ abstract class AbstractResizer extends Component<ResizerProps, SpreadsheetChildE
150150
this.state.waitingForMove = false;
151151
}
152152

153-
onMouseMove(ev: PointerEvent) {
154-
if (this.env.isMobile()) {
153+
onMouseMove(ev: MouseEvent) {
154+
if (
155+
this.env.isMobile() ||
156+
this.env.model.getters.isReadonly() ||
157+
this.state.isResizing ||
158+
this.state.isMoving ||
159+
this.state.isSelecting
160+
) {
155161
return;
156162
}
157163
const zoomedMouseEvent = withZoom(this.env, ev);
158-
if (this.state.isResizing || this.state.isMoving || this.state.isSelecting) {
159-
return;
160-
}
161164
this._computeHandleDisplay(zoomedMouseEvent);
162165
this._computeGrabDisplay(zoomedMouseEvent);
163166
}
@@ -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
@@ -31,6 +31,7 @@ import {
3131
click,
3232
edgeScrollDelay,
3333
selectColumnByClicking,
34+
simulateClick,
3435
triggerMouseEvent,
3536
} from "../test_helpers/dom_helper";
3637
import { getEvaluatedCell, getSelectionAnchorCellXc } from "../test_helpers/getters_helpers";
@@ -656,6 +657,20 @@ describe("Resizer component", () => {
656657
await nextTick();
657658
expect(fixture.querySelector(".o-context-menu")).toBeFalsy();
658659
});
660+
661+
test("Can open context menu in readonly", async () => {
662+
model.updateMode("readonly");
663+
triggerMouseEvent(".o-overlay .o-col-resizer", "contextmenu", 10, 10);
664+
await nextTick();
665+
expect(fixture.querySelector(".o-menu")).toBeTruthy();
666+
});
667+
668+
test("Cannot resize a column in readonly", async () => {
669+
model.updateMode("readonly");
670+
triggerMouseEvent(".o-overlay .o-col-resizer", "mousemove", DEFAULT_CELL_WIDTH, 10);
671+
await nextTick();
672+
expect(fixture.querySelector(".o-overlay .o-col-resizer .o-handle")).toBeNull();
673+
});
659674
});
660675

661676
describe("Hide/show columns", () => {
@@ -1116,6 +1131,15 @@ describe("move selected element(s)", () => {
11161131
expect(getEvaluatedCell(model, "C1").value).toBe("c1");
11171132
expect(getEvaluatedCell(model, "D1").value).toBe("d1");
11181133
});
1134+
1135+
test("Can select a column but not move it in readonly", async () => {
1136+
model.updateMode("readonly");
1137+
await selectColumnByClicking(model, "A", {});
1138+
expect(model.getters.getActiveCols()).toEqual(new Set([0]));
1139+
1140+
await simulateClick(".o-overlay .o-col-resizer", 10, 10);
1141+
expect(fixture.querySelector(".o-overlay .o-col-resizer")?.classList).not.toContain("o-grab");
1142+
});
11191143
});
11201144

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

0 commit comments

Comments
 (0)