import React from 'react' import { getBlockIcon, getBlockTitle } from 'notion-utils' import { Block, PageBlock, CalloutBlock } from 'notion-types' import { cs, isUrl } from '../utils' import { DefaultPageIcon } from '../icons/default-page-icon' import { useNotionContext } from '../context' import { GracefulImage } from './graceful-image' const isIconBlock = (value: Block): value is PageBlock | CalloutBlock => { return ( value.type === 'page' || value.type === 'callout' || value.type === 'collection_view' || value.type === 'collection_view_page' ) } export const PageIcon: React.FC<{ block: Block className?: string hideDefaultIcon?: boolean defaultIcon?: string }> = ({ block, className, hideDefaultIcon = false, defaultIcon }) => { const { mapImageUrl, recordMap } = useNotionContext() if (!isIconBlock(block)) { return null } const icon = getBlockIcon(block, recordMap) ?? defaultIcon const title = getBlockTitle(block, recordMap) if (icon && isUrl(icon)) { const url = mapImageUrl(icon, block) return ( ) } else { const iconValue = icon?.trim() if (!iconValue) { if (hideDefaultIcon) { return null } return ( ) } return ( {iconValue} ) } }