Skip to content

Commit 178d0e0

Browse files
authored
fix: exit edit mode when a cell becomes non-editable (#7361)
1 parent 706b40c commit 178d0e0

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

packages/grid-pro/src/vaadin-grid-pro-inline-editing-mixin.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,15 @@ export const InlineEditingMixin = (superClass) =>
536536
}
537537
// Otherwise, check isCellEditable function
538538
const model = this.__getRowModel(cell.parentElement);
539-
return column.isCellEditable(model);
539+
const isEditable = column.isCellEditable(model);
540+
541+
// Cancel editing if the cell is currently edited one and becomes no longer editable
542+
// TODO: should be moved to `_updateItem` when Grid connector is updated to use it.
543+
if (this.__edited && this.__edited.cell === cell && !isEditable) {
544+
this._stopEdit(true, true);
545+
}
546+
547+
return isEditable;
540548
}
541549

542550
/**

packages/grid-pro/test/edit-column.common.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,18 @@ describe('edit column', () => {
325325
expect(isCellEditable(1, 2)).to.be.true;
326326
});
327327

328+
it('should stop editing when cell becomes non-editable after updating provider function', async () => {
329+
// Enable editing
330+
amountColumn.isCellEditable = () => true;
331+
const cell = getContainerCell(grid.$.items, 1, 2);
332+
enter(cell);
333+
expect(getCellEditor(cell)).to.be.ok;
334+
// Disable editing
335+
amountColumn.isCellEditable = () => false;
336+
await nextFrame();
337+
expect(getCellEditor(cell)).to.be.not.ok;
338+
});
339+
328340
it('should not add editable-cell part to non-editable cells', () => {
329341
expect(hasEditablePart(0, 0)).to.be.false;
330342
expect(hasEditablePart(0, 1)).to.be.true;

0 commit comments

Comments
 (0)