diff --git a/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.ts b/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.ts new file mode 100644 index 00000000..8167f5c1 --- /dev/null +++ b/packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.ts @@ -0,0 +1,35 @@ +import { KeyboardShortcutCommand, findParentNodeClosestToPos } from '@tiptap/core' +import { isCellSelection } from './isCellSelection' + +export const deleteTableWhenAllCellsSelected: KeyboardShortcutCommand = ({ editor }) => { + const { selection } = editor.state + + if (!isCellSelection(selection)) { + return false + } + + let cellCount = 0 + const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => { + return node.type.name === 'table' + }) + + table?.node.descendants(node => { + if (node.type.name === 'table') { + return false + } + + if (['tableCell', 'tableHeader'].includes(node.type.name)) { + cellCount += 1 + } + }) + + const allCellsSelected = cellCount === selection.ranges.length + + if (!allCellsSelected) { + return false + } + + editor.commands.deleteTable() + + return true +}