Skip to content

Commit 5a8a91d

Browse files
committed
loading pagefind-ui.js as a script and then using window.PagefindUI
1 parent 614f9ff commit 5a8a91d

1 file changed

Lines changed: 32 additions & 2 deletions

File tree

src/pages/search.astro

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,37 @@ import BaseLayout from '../layouts/BaseLayout.astro';
3535
`;
3636
};
3737

38+
const loadPagefindUI = () =>
39+
new Promise((resolve, reject) => {
40+
if (window.PagefindUI) {
41+
resolve(window.PagefindUI);
42+
return;
43+
}
44+
45+
const existing = document.querySelector('script[data-pagefind-ui]');
46+
if (existing) {
47+
existing.addEventListener('load', () => {
48+
if (window.PagefindUI) resolve(window.PagefindUI);
49+
else reject(new Error('Pagefind UI loaded without global constructor'));
50+
});
51+
existing.addEventListener('error', () => reject(new Error('Failed to load Pagefind UI')));
52+
return;
53+
}
54+
55+
const script = document.createElement('script');
56+
script.src = '/pagefind/pagefind-ui.js';
57+
script.async = true;
58+
script.dataset.pagefindUi = 'true';
59+
script.onload = () => {
60+
if (window.PagefindUI) resolve(window.PagefindUI);
61+
else reject(new Error('Pagefind UI loaded without global constructor'));
62+
};
63+
script.onerror = () => reject(new Error('Failed to load Pagefind UI'));
64+
document.head.appendChild(script);
65+
});
66+
3867
try {
39-
const { PagefindUI } = await import('/pagefind/pagefind-ui.js');
68+
const PagefindUI = await loadPagefindUI();
4069
new PagefindUI({
4170
element: '#search-ui',
4271
showSubResults: true,
@@ -49,7 +78,8 @@ import BaseLayout from '../layouts/BaseLayout.astro';
4978
search_label: 'Search site',
5079
},
5180
});
52-
} catch {
81+
} catch (error) {
82+
console.error(error);
5383
showFallback();
5484
}
5585
</script>

0 commit comments

Comments
 (0)