diff --git a/src/plugins/core/borders.ts b/src/plugins/core/borders.ts index f24626b24..b36984b89 100644 --- a/src/plugins/core/borders.ts +++ b/src/plugins/core/borders.ts @@ -100,7 +100,7 @@ export class BordersPlugin extends CorePlugin implements Bor this.clearBorders(cmd.sheetId, cmd.target); break; case "REMOVE_COLUMNS_ROWS": - for (let el of cmd.elements) { + for (let el of [...cmd.elements].sort((a, b) => b - a)) { if (cmd.dimension === "COL") { this.shiftBordersHorizontally(cmd.sheetId, el + 1, -1); } else { diff --git a/tests/borders/border_plugin.test.ts b/tests/borders/border_plugin.test.ts index 720b920c1..2e55a68fd 100644 --- a/tests/borders/border_plugin.test.ts +++ b/tests/borders/border_plugin.test.ts @@ -6,6 +6,8 @@ import { addRows, cut, deleteCells, + deleteColumns, + deleteRows, paste, selectCell, setAnchorCorner, @@ -573,6 +575,21 @@ describe("Grid manipulation", () => { expect(getBorder(model, "B4")).toEqual({ top: DEFAULT_BORDER_DESC }); }); + test("Remove multiple headers before the borders", () => { + const b = DEFAULT_BORDER_DESC; + setZoneBorders(model, { position: "external" }, ["C3"]); + deleteRows(model, [0, 1]); + expect(getBorder(model, "B1")).toEqual({ right: b }); + expect(getBorder(model, "C1")).toEqual({ top: b, left: b, right: b, bottom: b }); + expect(getBorder(model, "D1")).toEqual({ left: b }); + expect(getBorder(model, "C2")).toEqual({ top: b }); + + deleteColumns(model, ["A", "B"]); + expect(getBorder(model, "A1")).toEqual({ top: b, left: b, right: b, bottom: b }); + expect(getBorder(model, "B1")).toEqual({ left: b }); + expect(getBorder(model, "A2")).toEqual({ top: b }); + }); + test("Borders are correctly duplicated on sheet dup", () => { setZoneBorders(model, { position: "external" }, ["B2"]); const sheetId = model.getters.getActiveSheetId();