|
1 | 1 | import Head from 'next/head'
|
2 | 2 | import { useRouter } from 'next/router'
|
3 |
| -import { useEffect, useRef } from 'react' |
| 3 | +import { useEffect, useRef, useState, useCallback } from 'react' |
4 | 4 | import { useDispatch, useSelector } from 'react-redux'
|
5 | 5 | import { css, cx } from '@emotion/css'
|
6 | 6 |
|
@@ -83,6 +83,12 @@ export default function Reader() {
|
83 | 83 |
|
84 | 84 | const articleRef = useRef(null)
|
85 | 85 |
|
| 86 | + const [annotationsProcessed, setAnnotationsProcessed] = useState(false) |
| 87 | + const annotationsCallback = useCallback(() => { |
| 88 | + if (annotationsProcessed) return |
| 89 | + setAnnotationsProcessed(true) |
| 90 | + }, [annotationsProcessed]) |
| 91 | + |
86 | 92 | // Item Data
|
87 | 93 | const itemId = useSelector((state) => state.idMap[slug])
|
88 | 94 | const item = useSelector((state) => state.itemsDisplay[itemId])
|
@@ -203,10 +209,18 @@ export default function Reader() {
|
203 | 209 | <Toolbar id={itemId} />
|
204 | 210 |
|
205 | 211 | <main className={articleWrapperStyles}>
|
206 |
| - <SidebarWrapper id={itemId} articleRef={articleRef} /> |
| 212 | + <SidebarWrapper |
| 213 | + id={itemId} |
| 214 | + articleRef={articleRef} |
| 215 | + annotationsProcessed={annotationsProcessed} |
| 216 | + /> |
207 | 217 | <article className={articleClasses} style={customStyles}>
|
208 | 218 | <Header id={itemId} />
|
209 |
| - <ContentWrapper id={itemId} articleRef={articleRef} /> |
| 219 | + <ContentWrapper |
| 220 | + id={itemId} |
| 221 | + articleRef={articleRef} |
| 222 | + annotationsCallback={annotationsCallback} |
| 223 | + /> |
210 | 224 | </article>
|
211 | 225 | </main>
|
212 | 226 |
|
|
0 commit comments