diff --git a/src/plugins/ui_stateful/sheetview.ts b/src/plugins/ui_stateful/sheetview.ts index 3814b1a8ce..486a391185 100644 --- a/src/plugins/ui_stateful/sheetview.ts +++ b/src/plugins/ui_stateful/sheetview.ts @@ -237,6 +237,7 @@ export class SheetViewPlugin extends UIPlugin { break; case "DELETE_SHEET": this.cleanViewports(); + this.sheetsWithDirtyViewports.delete(cmd.sheetId); break; case "ACTIVATE_SHEET": this.sheetsWithDirtyViewports.add(cmd.sheetIdTo); diff --git a/tests/sheet/sheetview_plugin.test.ts b/tests/sheet/sheetview_plugin.test.ts index e166c436f5..e0ad00a3c4 100644 --- a/tests/sheet/sheetview_plugin.test.ts +++ b/tests/sheet/sheetview_plugin.test.ts @@ -3,12 +3,15 @@ import { ComposerStore } from "../../src/components/composer/composer/composer_s import { DEFAULT_CELL_HEIGHT, DEFAULT_CELL_WIDTH, + DEFAULT_REVISION_ID, + MESSAGE_VERSION, getDefaultSheetViewSize, } from "../../src/constants"; import { isDefined, numberToLetters, range, toXC, toZone, zoneToXc } from "../../src/helpers"; import { Model } from "../../src/model"; import { SheetViewPlugin } from "../../src/plugins/ui_stateful/sheetview"; import { Zone } from "../../src/types"; +import { StateUpdateMessage } from "../../src/types/collaborative/transport_service"; import { activateSheet, addColumns, @@ -930,6 +933,25 @@ describe("Viewport of Simple sheet", () => { height: 4.5 * DEFAULT_CELL_HEIGHT, }); }); + + test("Loading a model with initial revisions in sheet that is deleted doesn't crash", () => { + const initialMessages: StateUpdateMessage[] = [ + { + type: "REMOTE_REVISION", + serverRevisionId: DEFAULT_REVISION_ID, + nextRevisionId: "1", + version: MESSAGE_VERSION, + clientId: "bob", + commands: [ + { type: "CREATE_SHEET", position: 1, sheetId: "newSheetId" }, + { type: "UPDATE_CELL", sheetId: "newSheetId", col: 0, row: 0, content: "1" }, + { type: "DELETE_SHEET", sheetId: "newSheetId" }, + ], + }, + ]; + + expect(() => new Model({}, {}, initialMessages)).not.toThrow(); + }); }); describe("Multi Panes viewport", () => {