Stop a listing page from rewriting the next one's grid after navigation.
Switching between /mints, /fedimints and /lnurl-mints showed the right list for a moment and then flashed back to the previous ecosystem's mints. The client router keeps every page's script alive, and onReady re-runs each setup on every arrival, so a visited page's setup also ran on the next page. All three grids were marked with the same bare data-mint-grid, so the stale setup found the new grid, fetched its own type and overwrote it. Mark and query each grid by ecosystem (data-mint-grid="cashu" etc.), the way the home page already scopes data-home-grid, so a stale setup finds nothing and bails. Skip the render in hydrateMintGrid when the grid has already been detached by the router. Document the re-run-everywhere contract on onReady, and add a static wiring test so a bare marker cannot come back. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
70b35f4ccc
commit
ae7664fbe0
@@ -208,6 +208,15 @@ export function armSharedTransitions(): void {
|
||||
* only does its work at module scope is dead after the first navigation. It does fire
|
||||
* `astro:page-load` on every arrival, including the first, but on the first it waits
|
||||
* for `window.load`, which is far too late to be the only trigger. Hence both.
|
||||
*
|
||||
* The listener is never removed, on purpose: a layout island (the language switcher,
|
||||
* the login dialog) has DOM on every page, and this is what keeps it alive. The flip
|
||||
* side is that `setup` runs on *every* page the router swaps in, not only pages that
|
||||
* include the script. A page-level script must therefore look its DOM up by a marker
|
||||
* unique to that page — `data-mint-grid="cashu"`, `data-home-grid="fedimint"` — and do
|
||||
* nothing when the marker is absent. A marker shared between pages means a stale page's
|
||||
* setup finds the current page's DOM and rewrites it: the listing pages once flashed
|
||||
* back to the previous ecosystem's mints for exactly that reason.
|
||||
*/
|
||||
export function onReady(setup: () => void): void {
|
||||
let done = false;
|
||||
|
||||
Reference in New Issue
Block a user