Skip to content

Commit 3ee7650

Browse files
authored
fix: teleport CRUD form to overlay if some buttons are not set (#8372)
1 parent 5583b5d commit 3ee7650

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

packages/crud/src/vaadin-crud-mixin.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,14 +502,15 @@ export const CrudMixin = (superClass) =>
502502

503503
/** @private */
504504
__moveChildNodes(target) {
505-
const nodes = [this._headerNode, this._form, this._saveButton, this._cancelButton, this._deleteButton];
505+
const nodes = [this._headerNode, this._form];
506+
const buttons = [this._saveButton, this._cancelButton, this._deleteButton].filter(Boolean);
506507
if (!nodes.every((node) => node instanceof HTMLElement)) {
507508
return;
508509
}
509510

510511
// Teleport header node, form, and the buttons to corresponding slots.
511512
// NOTE: order in which buttons are moved matches the order of slots.
512-
nodes.forEach((node) => {
513+
[...nodes, ...buttons].forEach((node) => {
513514
target.appendChild(node);
514515
});
515516

packages/crud/test/crud-buttons.test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,7 @@ describe('crud buttons', () => {
931931
beforeEach(async () => {
932932
crud = document.createElement('vaadin-crud');
933933
crud._noDefaultButtons = true;
934+
crud.items = [{ foo: 'bar' }];
934935
document.body.appendChild(crud);
935936
await nextRender();
936937
});
@@ -954,6 +955,14 @@ describe('crud buttons', () => {
954955
it('should not create default delete-button', () => {
955956
expect(crud.querySelector('[slot="delete-button"]')).to.be.null;
956957
});
958+
959+
it('should teleport form and header when no default buttons set', async () => {
960+
crud.editedItem = { foo: 'baz' };
961+
await nextRender();
962+
const overlay = crud.$.dialog.$.overlay;
963+
expect(crud._form.parentElement).to.equal(overlay);
964+
expect(crud._headerNode.parentElement).to.equal(overlay);
965+
});
957966
});
958967

959968
describe('dataProvider', () => {

0 commit comments

Comments
 (0)