From 046d1ccb3bc809a276fc75ab7ad6484a74f36ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Tue, 20 Apr 2021 22:59:16 +0200 Subject: [PATCH] refactor: move deleteTableWhenAllCellsSelected to its own file --- .../deleteTableWhenAllCellsSelected.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/extension-table/src/utilities/deleteTableWhenAllCellsSelected.ts 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 +}