Skip to content

Commit 7962050

Browse files
authored
refactor: use custom element for dialog renderers instead of div (#10374)
1 parent 0f061c1 commit 7962050

File tree

4 files changed

+122
-35
lines changed

4 files changed

+122
-35
lines changed

packages/dialog/src/vaadin-dialog-overlay-mixin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const DialogOverlayMixin = (superClass) =>
6060
*/
6161
get _rendererRoot() {
6262
if (!this.__savedRoot) {
63-
const root = document.createElement('div');
63+
const root = document.createElement('vaadin-dialog-content');
6464
root.style.display = 'contents';
6565
this.owner.appendChild(root);
6666
this.__savedRoot = root;
@@ -94,7 +94,7 @@ export const DialogOverlayMixin = (superClass) =>
9494

9595
/** @private */
9696
__createContainer(slot) {
97-
const container = document.createElement('div');
97+
const container = document.createElement('vaadin-dialog-content');
9898
container.setAttribute('slot', slot);
9999
return container;
100100
}

packages/dialog/test/dom/__snapshots__/dialog.test.snap.js

Lines changed: 73 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,83 @@
11
/* @web/test-runner snapshot v1 */
22
export const snapshots = {};
33

4-
snapshots["vaadin-dialog host"] =
4+
snapshots["vaadin-dialog host default"] =
55
`<vaadin-dialog
66
aria-modal="true"
77
opened=""
88
role="dialog"
99
tabindex="0"
1010
with-backdrop=""
1111
>
12-
<div>
12+
<vaadin-dialog-content>
1313
content
14-
</div>
14+
</vaadin-dialog-content>
1515
</vaadin-dialog>
1616
`;
17-
/* end snapshot vaadin-dialog host */
17+
/* end snapshot vaadin-dialog host default */
1818

19-
snapshots["vaadin-dialog shadow"] =
19+
snapshots["vaadin-dialog host headerTitle"] =
20+
`<vaadin-dialog
21+
aria-label="Title"
22+
aria-modal="true"
23+
has-title=""
24+
opened=""
25+
role="dialog"
26+
tabindex="0"
27+
with-backdrop=""
28+
>
29+
<vaadin-dialog-content>
30+
content
31+
</vaadin-dialog-content>
32+
<h2
33+
class="draggable"
34+
slot="title"
35+
>
36+
Title
37+
</h2>
38+
</vaadin-dialog>
39+
`;
40+
/* end snapshot vaadin-dialog host headerTitle */
41+
42+
snapshots["vaadin-dialog host headerRenderer"] =
43+
`<vaadin-dialog
44+
aria-modal="true"
45+
has-header=""
46+
opened=""
47+
role="dialog"
48+
tabindex="0"
49+
with-backdrop=""
50+
>
51+
<vaadin-dialog-content>
52+
content
53+
</vaadin-dialog-content>
54+
<vaadin-dialog-content slot="header-content">
55+
Header
56+
</vaadin-dialog-content>
57+
</vaadin-dialog>
58+
`;
59+
/* end snapshot vaadin-dialog host headerRenderer */
60+
61+
snapshots["vaadin-dialog host footerRenderer"] =
62+
`<vaadin-dialog
63+
aria-modal="true"
64+
has-footer=""
65+
opened=""
66+
role="dialog"
67+
tabindex="0"
68+
with-backdrop=""
69+
>
70+
<vaadin-dialog-content>
71+
content
72+
</vaadin-dialog-content>
73+
<vaadin-dialog-content slot="footer">
74+
Footer
75+
</vaadin-dialog-content>
76+
</vaadin-dialog>
77+
`;
78+
/* end snapshot vaadin-dialog host footerRenderer */
79+
80+
snapshots["vaadin-dialog shadow default"] =
2081
`<vaadin-dialog-overlay
2182
exportparts="backdrop, overlay, header, title, header-content, content, footer"
2283
focus-trap=""
@@ -45,9 +106,9 @@ snapshots["vaadin-dialog shadow"] =
45106
</slot>
46107
</vaadin-dialog-overlay>
47108
`;
48-
/* end snapshot vaadin-dialog shadow */
109+
/* end snapshot vaadin-dialog shadow default */
49110

50-
snapshots["vaadin-dialog modeless"] =
111+
snapshots["vaadin-dialog shadow modeless"] =
51112
`<vaadin-dialog-overlay
52113
exportparts="backdrop, overlay, header, title, header-content, content, footer"
53114
focus-trap=""
@@ -76,9 +137,9 @@ snapshots["vaadin-dialog modeless"] =
76137
</slot>
77138
</vaadin-dialog-overlay>
78139
`;
79-
/* end snapshot vaadin-dialog modeless */
140+
/* end snapshot vaadin-dialog shadow modeless */
80141

81-
snapshots["vaadin-dialog theme"] =
142+
snapshots["vaadin-dialog shadow theme"] =
82143
`<vaadin-dialog-overlay
83144
exportparts="backdrop, overlay, header, title, header-content, content, footer"
84145
focus-trap=""
@@ -108,9 +169,9 @@ snapshots["vaadin-dialog theme"] =
108169
</slot>
109170
</vaadin-dialog-overlay>
110171
`;
111-
/* end snapshot vaadin-dialog theme */
172+
/* end snapshot vaadin-dialog shadow theme */
112173

113-
snapshots["vaadin-dialog overlay"] =
174+
snapshots["vaadin-dialog shadow overlay"] =
114175
`<div
115176
id="backdrop"
116177
part="backdrop"
@@ -164,5 +225,5 @@ snapshots["vaadin-dialog overlay"] =
164225
</section>
165226
</div>
166227
`;
167-
/* end snapshot vaadin-dialog overlay */
228+
/* end snapshot vaadin-dialog shadow overlay */
168229

packages/dialog/test/dom/dialog.test.js

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,53 @@ describe('vaadin-dialog', () => {
2222
await oneEvent(overlay, 'vaadin-overlay-open');
2323
});
2424

25-
it('host', async () => {
26-
await expect(dialog).dom.to.equalSnapshot(SNAPSHOT_CONFIG);
27-
});
25+
describe('host', () => {
26+
it('default', async () => {
27+
await expect(dialog).dom.to.equalSnapshot(SNAPSHOT_CONFIG);
28+
});
2829

29-
it('shadow', async () => {
30-
await expect(dialog).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
31-
});
30+
it('headerTitle', async () => {
31+
dialog.headerTitle = 'Title';
32+
await nextUpdate(dialog);
33+
await expect(dialog).dom.to.equalSnapshot(SNAPSHOT_CONFIG);
34+
});
3235

33-
it('modeless', async () => {
34-
dialog.modeless = true;
35-
await nextUpdate(dialog);
36-
await expect(dialog).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
37-
});
36+
it('headerRenderer', async () => {
37+
dialog.headerRenderer = (root) => {
38+
root.textContent = 'Header';
39+
};
40+
await nextUpdate(dialog);
41+
await expect(dialog).dom.to.equalSnapshot(SNAPSHOT_CONFIG);
42+
});
3843

39-
it('theme', async () => {
40-
dialog.setAttribute('theme', 'custom');
41-
await nextUpdate(dialog);
42-
await expect(dialog).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
44+
it('footerRenderer', async () => {
45+
dialog.footerRenderer = (root) => {
46+
root.textContent = 'Footer';
47+
};
48+
await nextUpdate(dialog);
49+
await expect(dialog).dom.to.equalSnapshot(SNAPSHOT_CONFIG);
50+
});
4351
});
4452

45-
it('overlay', async () => {
46-
await expect(overlay).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
53+
describe('shadow', () => {
54+
it('default', async () => {
55+
await expect(dialog).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
56+
});
57+
58+
it('modeless', async () => {
59+
dialog.modeless = true;
60+
await nextUpdate(dialog);
61+
await expect(dialog).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
62+
});
63+
64+
it('theme', async () => {
65+
dialog.setAttribute('theme', 'custom');
66+
await nextUpdate(dialog);
67+
await expect(dialog).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
68+
});
69+
70+
it('overlay', async () => {
71+
await expect(overlay).shadowDom.to.equalSnapshot(SNAPSHOT_CONFIG);
72+
});
4773
});
4874
});

packages/dialog/test/header-footer.test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ describe('header/footer feature', () => {
157157
await nextRender();
158158

159159
expect(dialog.textContent).to.include(HEADER_CONTENT);
160-
expect(dialog.querySelector('div[slot=header-content]')).to.exist;
160+
expect(dialog.querySelector('[slot=header-content]')).to.exist;
161161
});
162162

163163
it('should remove header element if headerRenderer is removed', async () => {
@@ -169,7 +169,7 @@ describe('header/footer feature', () => {
169169
await nextUpdate(dialog);
170170

171171
expect(dialog.textContent).to.not.include(HEADER_CONTENT);
172-
expect(dialog.querySelector('div[slot=header-content]')).to.not.exist;
172+
expect(dialog.querySelector('[slot=header-content]')).to.not.exist;
173173
});
174174

175175
it('should render new content if another headerRenderer is set', async () => {
@@ -243,7 +243,7 @@ describe('header/footer feature', () => {
243243
await nextRender();
244244

245245
expect(dialog.textContent).to.include(FOOTER_CONTENT);
246-
expect(dialog.querySelector('div[slot=footer]')).to.exist;
246+
expect(dialog.querySelector('[slot=footer]')).to.exist;
247247
});
248248

249249
it('should remove footer element if footerRenderer is removed', async () => {
@@ -255,7 +255,7 @@ describe('header/footer feature', () => {
255255
await nextUpdate(dialog);
256256

257257
expect(dialog.textContent).to.not.include(FOOTER_CONTENT);
258-
expect(dialog.querySelector('div[slot=footer]')).to.not.exist;
258+
expect(dialog.querySelector('[slot=footer]')).to.not.exist;
259259
});
260260

261261
it('should render new content if another footerRenderer is set', async () => {

0 commit comments

Comments
 (0)