|
1 | 1 | import * as React from "react"; |
2 | | -import { LoadPageChunkData, DecorationType } from "./types"; |
| 2 | +import { DecorationType, BlockMapType, BlockType } from "./types"; |
3 | 3 | import Asset from "./components/asset"; |
4 | 4 | import Code from "./components/code"; |
5 | 5 |
|
@@ -43,7 +43,7 @@ export const renderChildText = (properties: DecorationType[]) => { |
43 | 43 | }; |
44 | 44 |
|
45 | 45 | interface Block { |
46 | | - block: LoadPageChunkData["recordMap"]["block"][""]; |
| 46 | + block: BlockType; |
47 | 47 | level: number; |
48 | 48 | } |
49 | 49 |
|
@@ -130,7 +130,7 @@ export const Block: React.FC<Block> = props => { |
130 | 130 | }; |
131 | 131 |
|
132 | 132 | interface ChildProps { |
133 | | - blockMap: LoadPageChunkData["recordMap"]["block"]; |
| 133 | + blockMap: BlockMapType; |
134 | 134 | level: number; |
135 | 135 | ids: string[]; |
136 | 136 | } |
@@ -235,26 +235,29 @@ export const Child: React.FC<ChildProps> = props => { |
235 | 235 | }; |
236 | 236 |
|
237 | 237 | interface NotionProps { |
238 | | - blockMap: LoadPageChunkData["recordMap"]["block"]; |
239 | | - currentID: string; |
240 | | - level: number; |
| 238 | + blockMap: BlockMapType; |
| 239 | + currentID?: string; |
| 240 | + level?: number; |
241 | 241 | } |
242 | 242 |
|
243 | | -export const NotionRenderer: React.FC<NotionProps> = props => { |
244 | | - const currentBlock = props.blockMap[props.currentID]; |
| 243 | +export const NotionRenderer: React.FC<NotionProps> = ({ |
| 244 | + level = 0, |
| 245 | + currentID, |
| 246 | + blockMap |
| 247 | +}) => { |
| 248 | + const id = currentID || Object.keys(blockMap)[0]; |
| 249 | + const currentBlock = blockMap[id]; |
245 | 250 |
|
246 | | - const renderChildren = !( |
247 | | - currentBlock?.value?.type === "page" && props.level > 0 |
248 | | - ); |
| 251 | + const renderChildren = !(currentBlock?.value?.type === "page" && level > 0); |
249 | 252 |
|
250 | 253 | return ( |
251 | 254 | <> |
252 | | - <Block level={props.level} block={currentBlock} /> |
| 255 | + <Block level={level} block={currentBlock} /> |
253 | 256 | {currentBlock?.value?.content && renderChildren && ( |
254 | 257 | <Child |
255 | | - level={props.level} |
| 258 | + level={level} |
256 | 259 | ids={currentBlock?.value?.content} |
257 | | - blockMap={props.blockMap} |
| 260 | + blockMap={blockMap} |
258 | 261 | /> |
259 | 262 | )} |
260 | 263 | </> |
|
0 commit comments