Skip to content

Commit bf687da

Browse files
committed
fix: handle hydration missing menu and style
#258
1 parent 2562d4a commit bf687da

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

src/main.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ function main() {
1616
styleEl.id = 'sentinel-css'
1717
document.head.append(styleEl)
1818

19-
const injectionWeakMap = new WeakMap()
19+
const injectionMap = new Map<HTMLElement, HTMLElement>()
2020

21-
sentinel.on('nav', (nav) => {
22-
if (injectionWeakMap.has(nav)) return
23-
injectionWeakMap.set(nav, true)
21+
const injectNavMenu = (nav: HTMLElement) => {
22+
if (injectionMap.has(nav)) return
2423

2524
const container = getMenuContainer()
25+
injectionMap.set(nav, container)
26+
2627
const chatList = nav.querySelector(':scope > div.overflow-y-auto, :scope > div.overflow-y-hidden')
2728
if (chatList) {
2829
chatList.after(container)
@@ -31,7 +32,21 @@ function main() {
3132
// fallback to the bottom of the nav
3233
nav.append(container)
3334
}
34-
})
35+
}
36+
37+
sentinel.on('nav', injectNavMenu)
38+
39+
setInterval(() => {
40+
injectionMap.forEach((container, nav) => {
41+
if (!nav.isConnected) {
42+
container.remove()
43+
injectionMap.delete(nav)
44+
}
45+
})
46+
47+
const navList = Array.from(document.querySelectorAll('nav')).filter(nav => !injectionMap.has(nav))
48+
navList.forEach(injectNavMenu)
49+
}, 300)
3550

3651
// Support for share page
3752
if (isSharePage()) {

vite.config.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,17 @@ export default defineConfig({
7373
['jszip', cdn.jsdelivr('JSZip', 'dist/jszip.min.js')],
7474
['html2canvas', cdn.jsdelivr('html2canvas', 'dist/html2canvas.min.js')],
7575
],
76+
cssSideEffects() {
77+
return (e) => {
78+
const o = document.createElement('style')
79+
o.textContent = e
80+
document.head.append(o)
81+
setInterval(() => {
82+
if (o.isConnected) return
83+
document.head.append(o)
84+
}, 300)
85+
}
86+
},
7687
},
7788
server: {
7889
open: true,

0 commit comments

Comments
 (0)