import { DefaultBlockSchema, SpecificBlock } from "@blocknote/core"; import { SideMenuExtension } from "@blocknote/core/extensions"; import { ReactNode } from "react"; import { useComponentsContext } from "../../../../editor/ComponentsContext.js"; import { useBlockNoteEditor } from "../../../../hooks/useBlockNoteEditor.js"; import { useExtensionState } from "../../../../hooks/useExtension.js"; export const TableRowHeaderItem = (props: { children: ReactNode }) => { const Components = useComponentsContext()!; const editor = useBlockNoteEditor< { table: DefaultBlockSchema["table"] }, any, any >(); const block = useExtensionState(SideMenuExtension, { editor, selector: (state) => state?.block as | SpecificBlock< { table: DefaultBlockSchema["table"] }, "table", any, any > | undefined, }); if ( block === undefined || block.type !== "table" || !editor.settings.tables.headers ) { return null; } // TODO only support 1 header row for now const isHeaderRow = Boolean(block.content.headerRows); return ( { editor.updateBlock(block, { content: { ...block.content, headerRows: isHeaderRow ? undefined : 1, }, }); }} > {props.children} ); }; export const TableColumnHeaderItem = (props: { children: ReactNode }) => { const Components = useComponentsContext()!; const editor = useBlockNoteEditor< { table: DefaultBlockSchema["table"] }, any, any >(); const block = useExtensionState(SideMenuExtension, { editor, selector: (state) => state?.block as | SpecificBlock< { table: DefaultBlockSchema["table"] }, "table", any, any > | undefined, }); if ( block === undefined || block.type !== "table" || !editor.settings.tables.headers ) { return null; } // TODO only support 1 header column for now const isHeaderColumn = Boolean(block.content.headerCols); return ( { editor.updateBlock(block, { content: { ...block.content, headerCols: isHeaderColumn ? undefined : 1, }, }); }} > {props.children} ); };