fix(editor): guard stale table handle state

This commit is contained in:
lucaronin
2026-05-05 11:20:43 +02:00
parent 9c09b5ad78
commit b8e3d8193c
4 changed files with 206 additions and 41 deletions

View File

@@ -144,6 +144,51 @@ describe('BlockNote table handles regression', () => {
view.destroy()
})
it('hides stale table handles instead of throwing when a reload clears the hovered block', () => {
const editorRoot = document.createElement('div')
document.body.appendChild(editorRoot)
const editor = {
getBlock: vi.fn(),
}
const emitUpdate = vi.fn()
const view = new TableHandlesView(
editor as never,
{
dom: editorRoot,
root: document,
} as never,
emitUpdate,
)
view.state = {
block: undefined,
show: true,
showAddOrRemoveRowsButton: true,
showAddOrRemoveColumnsButton: true,
rowIndex: 0,
colIndex: 0,
draggingState: {
draggedCellOrientation: 'row',
originalIndex: 0,
mousePos: 10,
},
} as never
expect(() => view.update()).not.toThrow()
expect(editor.getBlock).not.toHaveBeenCalled()
expect(view.state?.show).toBe(false)
expect(view.state?.showAddOrRemoveRowsButton).toBe(false)
expect(view.state?.showAddOrRemoveColumnsButton).toBe(false)
expect(view.state?.rowIndex).toBeUndefined()
expect(view.state?.colIndex).toBeUndefined()
expect(view.state?.draggingState).toBeUndefined()
expect(emitUpdate).toHaveBeenCalled()
view.destroy()
})
it('ignores stale table drag starts instead of throwing when hover state is unavailable', () => {
const { editor, extension, view } = mountTableHandlesExtension()