import { Bookmark } from "./Bookmark/Bookmark"; import { Breadcrumb } from "./Breadcrumb/Breadcrumb"; import { BulletedListItem } from "./BulletedListItem/BulletedListItem"; import { Callout } from "./Callout/Callout"; import { ChildDatabase } from "./ChildDatabase/ChildDatabase"; import { Code } from "./Code/Code"; import { Column } from "./ColumnList/Column"; import { ColumnList } from "./ColumnList/ColumnList"; import { Divider } from "./Divider/Divider"; import { Embed } from "./Embed/Embed"; import { File } from "./File/File"; import { Heading_1 } from "./Heading/Heading_1"; import { Heading_2 } from "./Heading/Heading_2"; import { Heading_3 } from "./Heading/Heading_3"; import { LinkPreview } from "./LinkPreview/LinkPreview"; import { NumberedListItem } from "./NumberedListItem/NumberedListItem"; import { Paragraph } from "./Paragraph/Paragraph"; import { Quote } from "./Quote/Quote"; import { Table } from "./Table/Table"; import { TableRow } from "./Table/TableRow"; import { TableOfContents } from "./TableOfContents/TableOfContents"; import { Image } from "./Image/Image"; import { Todo } from "./Todo/Todo"; import { Toggle } from "./Toggle/Toggle"; import { Unsupported } from "./Unsupported/Unsupported"; import { Video } from "./Video/Video"; import { ContentTypeFactory } from "../ContentTypes/ContentType.factory"; export class BlockFactory { static transformWithType(blockRawJson: any) { if (!blockRawJson || !blockRawJson.type) { return new Unsupported(blockRawJson) } if (blockRawJson.raw) { const alreadyTypedObject = blockRawJson return alreadyTypedObject } switch (blockRawJson.type) { case 'bookmark': return new Bookmark(blockRawJson) case 'breadcrumb': return new Breadcrumb(blockRawJson) case 'bulleted_list_item': return new BulletedListItem(blockRawJson) case 'callout': return new Callout(blockRawJson) case 'child_database': return new ChildDatabase(blockRawJson) case 'code': return new Code(blockRawJson) case 'column_list': return new ColumnList(blockRawJson) case 'column': return new Column(blockRawJson) case 'divider': return new Divider(blockRawJson) case 'embed': return new Embed(blockRawJson) case 'file': return new File(blockRawJson) case 'heading_1': return new Heading_1(blockRawJson) case 'heading_2': return new Heading_2(blockRawJson) case 'heading_3': return new Heading_3(blockRawJson) case 'paragraph': return new Paragraph(blockRawJson) case 'image': return new Image(blockRawJson) case 'link_preview': return new LinkPreview(blockRawJson) case 'numbered_list_item': return new NumberedListItem(blockRawJson) case 'quote': return new Quote(blockRawJson) case 'table': return new Table(blockRawJson) case 'table_row': return new TableRow(blockRawJson) case 'table_of_contents': return new TableOfContents(blockRawJson) case 'to_do': return new Todo(blockRawJson) case 'toggle': return new Toggle(blockRawJson) case 'unsupported': return new Unsupported(blockRawJson) case 'video': return new Video(blockRawJson) default: const contentType = ContentTypeFactory.transformWithType(blockRawJson) if (contentType.type !== 'unsupported_content') { return contentType } console.error('cannot parse block object ', blockRawJson) return new Unsupported(blockRawJson) } } }