Skip to content

Commit

Permalink
Fix video persistence regression (#8271)
Browse files Browse the repository at this point in the history
* Fix video persistence regression

* Adding a changeset
  • Loading branch information
matthewp authored Aug 29, 2023
1 parent 834a00d commit 16f09df
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 12 deletions.
5 changes: 5 additions & 0 deletions .changeset/tame-knives-shake.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': patch
---

Fix video persistence regression
6 changes: 2 additions & 4 deletions packages/astro/components/ViewTransitions.astro
Original file line number Diff line number Diff line change
Expand Up @@ -165,18 +165,16 @@ const { fallback = 'animate' } = Astro.props as Props;

// Persist elements in the existing body
const oldBody = document.body;
document.body.replaceWith(doc.body);
for (const el of oldBody.querySelectorAll(`[${PERSIST_ATTR}]`)) {
const id = el.getAttribute(PERSIST_ATTR);
const newEl = doc.querySelector(`[${PERSIST_ATTR}="${id}"]`);
const newEl = document.querySelector(`[${PERSIST_ATTR}="${id}"]`);
if (newEl) {
// The element exists in the new page, replace it with the element
// from the old page so that state is preserved.
newEl.replaceWith(el);
}
}
// Only replace the existing body *AFTER* persistent elements are moved over
// This avoids disconnecting `astro-island` nodes multiple times
document.body.replaceWith(doc.body);

// Simulate scroll behavior of Safari and
// Chromium based browsers (Chrome, Edge, Opera, ...)
Expand Down
14 changes: 6 additions & 8 deletions packages/astro/src/runtime/server/astro-island.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,8 @@ declare const Astro: {
public hydrator: any;
static observedAttributes = ['props'];
disconnectedCallback() {
document.addEventListener(
'astro:after-swap',
() => {
// If element wasn't persisted, fire unmount event
if (!this.isConnected) this.dispatchEvent(new CustomEvent('astro:unmount'));
},
{ once: true }
);
document.removeEventListener('astro:after-swap', this.unmount);
document.addEventListener('astro:after-swap', this.unmount, { once: true });
}
connectedCallback() {
if (!this.hasAttribute('await-children') || this.firstChild) {
Expand Down Expand Up @@ -176,6 +170,10 @@ declare const Astro: {
attributeChangedCallback() {
this.hydrate();
}
unmount = () => {
// If element wasn't persisted, fire unmount event
if (!this.isConnected) this.dispatchEvent(new CustomEvent('astro:unmount'));
}
}
);
}
Expand Down

0 comments on commit 16f09df

Please sign in to comment.