import { fileBlockConfig, fileParse } from "@blocknote/core"; import { createReactBlockSpec } from "@blocknote/react"; import type { ReactCustomBlockRenderProps } from "@blocknote/react"; import { useCallback } from "react"; import { resolveFileDisplayUrl } from "../fileDisplayUrl"; function FileIcon(props: { block: { props: { caption?: string; url?: string } } }) { const { caption, url } = props.block.props; const iconUrl = caption || (url ? resolveFileDisplayUrl(url) : ""); if (iconUrl) { return ; } return ( ); } function FileBlockRender( props: ReactCustomBlockRenderProps, ) { const addFileButtonMouseDownHandler = useCallback( (event: React.MouseEvent) => event.preventDefault(), [], ); const addFileButtonClickHandler = useCallback(() => { props.editor.transact((tr: any) => tr.setMeta(props.editor.filePanel!.plugins[0], { block: props.block, }), ); }, [props.block, props.editor]); if (props.block.props.url === "") { return ( Add file ); } return ( {props.block.props.name || props.block.props.url} ); } export const fileBlock = createReactBlockSpec(fileBlockConfig, { render: FileBlockRender, parse: fileParse, toExternalHTML: (props) => { if (!props.block.props.url) { return Add file; } return ( {props.block.props.name || props.block.props.url} ); }, });
{props.block.props.name || props.block.props.url}
Add file