Skip to content

Commit cfee1d4

Browse files
committed
fix(modal): refine teleport-ready timing and test stability
1 parent 87870e3 commit cfee1d4

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

src/components/modal/CdrModal.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ const handleClosed = () => {
269269
const openAfterTeleportReady = async () => {
270270
const openToken = ++pendingOpenToken;
271271
272-
if (!teleportDisabled.value) {
272+
if (!teleportDisabled.value && wrapperEl.value?.parentElement !== document.body) {
273273
// Wait for Teleport to move content to body before aria-hiding background.
274274
for (let i = 0; i < 3; i += 1) {
275275
await nextTick();
@@ -334,7 +334,7 @@ watch(
334334
},
335335
);
336336
337-
onMounted(async () => {
337+
onMounted(() => {
338338
// Keep Teleport inline for SSR + hydration, then move to body on client.
339339
teleportDisabled.value = false;
340340
window.addEventListener('resize', handleResize);

src/components/modal/__tests__/CdrModal.spec.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,13 @@ describe('CdrModal.vue', () => {
227227
});
228228

229229
await wrapper.setProps({ opened: true });
230-
await wrapper.vm.$nextTick();
231-
await wrapper.vm.$nextTick();
232-
await wrapper.vm.$nextTick();
230+
let modalEl = null;
231+
for (let i = 0; i < 10; i += 1) {
232+
await wrapper.vm.$nextTick();
233+
modalEl = document.body.querySelector('.cdr-modal');
234+
if (modalEl) break;
235+
}
233236

234-
const modalEl = document.body.querySelector('.cdr-modal');
235237
expect(modalEl).not.toBeNull();
236238
expect(modalEl.closest('[aria-hidden="true"]')).toBeNull();
237239

0 commit comments

Comments
 (0)