UNPKG

@udus/notion-renderer

Version:
237 lines (236 loc) 9.23 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { useMapper } from "../hooks.js"; import { AnnotationItemProvider } from "../Mapper/Annotation.js"; import { BlockProvider } from "../Mapper/Block.js"; import { LinkProvider } from "../Mapper/Link.js"; import { RichTextItemProvider } from "../Mapper/RichText.js"; import { Audio } from "./Audio.js"; import { Bookmark } from "./Bookmark.js"; import { Breadcrumb } from "./Breadcrumb.js"; import { BulletedList } from "./BulletedList.js"; import { BulletedListItem } from "./BulletedListItem.js"; import { Callout } from "./Callout.js"; import { ChildDatabase } from "./ChildDatabase.js"; import { ChildPage } from "./ChildPage.js"; import { Code } from "./Code.js"; import { Column } from "./Column.js"; import { ColumnList } from "./ColumnList.js"; import { Divider } from "./Divider.js"; import { Embed } from "./Embed.js"; import { Equation } from "./Equation.js"; import { File } from "./File.js"; import { Heading1 } from "./Heading1.js"; import { Heading2 } from "./Heading2.js"; import { Heading3 } from "./Heading3.js"; import { Image } from "./Image.js"; import { LinkPreview } from "./LinkPreview.js"; import { LinkToPage } from "./LinkToPage.js"; import { NumberedList } from "./NumberedList.js"; import { NumberedListItem } from "./NumberedListItem.js"; import { Paragraph } from "./Paragraph.js"; import { Pdf } from "./Pdf.js"; import { Quote } from "./Quote.js"; import { SyncedBlock } from "./SyncedBlock.js"; import { Table } from "./Table.js"; import { TableOfContents } from "./TableOfContents.js"; import { TableRow } from "./TableRow.js"; import { Template } from "./Template.js"; import { ToDo } from "./ToDo.js"; import { Toggle } from "./Toggle.js"; import { Unsupported } from "./Unsupported.js"; import { Video } from "./Video.js"; export const Block = ({ block, blockMapper, richTextItemMapper, annotationMapper, LinkComponent, }) => { return (_jsx(BlockProvider, { mapper: blockMapper, children: _jsx(RichTextItemProvider, { mapper: richTextItemMapper, children: _jsx(AnnotationItemProvider, { mapper: annotationMapper, children: _jsx(LinkProvider, { link: LinkComponent, children: _jsx(BlockSwitcher, { block: block }) }) }) }) })); }; const BlockSwitcher = ({ block }) => { if (!block) return null; const { blockMapper } = useMapper(); const mapper = { audio: Audio, bookmark: Bookmark, breadcrumb: Breadcrumb, bulleted_list: BulletedList, bulleted_list_item: BulletedListItem, callout: Callout, child_database: ChildDatabase, child_page: ChildPage, code: Code, column: Column, column_list: ColumnList, divider: Divider, embed: Embed, equation: Equation, file: File, heading_1: Heading1, heading_2: Heading2, heading_3: Heading3, image: Image, link_preview: LinkPreview, link_to_page: LinkToPage, numbered_list: NumberedList, numbered_list_item: NumberedListItem, paragraph: Paragraph, pdf: Pdf, quote: Quote, synced_block: SyncedBlock, table: Table, table_of_contents: TableOfContents, table_row: TableRow, template: Template, to_do: ToDo, toggle: Toggle, unsupported: Unsupported, video: Video, ...blockMapper, }; switch (block.type) { case "audio": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "bookmark": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "breadcrumb": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "bulleted_list": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "bulleted_list_item": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "callout": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "child_database": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "child_page": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "code": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "column": { console.warn(`top level column block is not supported. column block must be child of column_list block.`); const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "column_list": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "divider": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "embed": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "equation": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "file": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "heading_1": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "heading_2": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "heading_3": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "image": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "link_preview": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "link_to_page": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "numbered_list": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "numbered_list_item": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "paragraph": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "pdf": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "quote": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "synced_block": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "table": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "table_of_contents": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "table_row": { console.warn(`top level table_row block is not supported. table_row block must be child of table block.`); const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "template": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "to_do": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "toggle": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "unsupported": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } case "video": { const BlockComponent = mapper[block.type]; return _jsx(BlockComponent, { block: block }); } default: { // @ts-expect-error: to log when an unexpected 'block.type' is encountered, which is not in the type. console.warn(`${block.type} is never.`); return null; } } };