diff --git a/packages/extension-table/package.json b/packages/extension-table/package.json index edd80eb8..ba2fc39b 100644 --- a/packages/extension-table/package.json +++ b/packages/extension-table/package.json @@ -25,6 +25,7 @@ "@tiptap/core": "^2.0.0-alpha.6" }, "dependencies": { - "prosemirror-tables": "^1.1.1" + "prosemirror-tables": "^1.1.1", + "prosemirror-view": "^1.16.3" } } diff --git a/packages/extension-table/src/TableView.ts b/packages/extension-table/src/TableView.ts index 2d6c39f6..96a00e4f 100644 --- a/packages/extension-table/src/TableView.ts +++ b/packages/extension-table/src/TableView.ts @@ -1,4 +1,6 @@ // @ts-nocheck +import { NodeView } from 'prosemirror-view' + export function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) { let totalWidth = 0 let fixedWidth = true @@ -44,7 +46,7 @@ export function updateColumns(node, colgroup, table, cellMinWidth, overrideCol, } } -export class TableView { +export class TableView implements NodeView { constructor(node, cellMinWidth) { this.node = node this.cellMinWidth = cellMinWidth diff --git a/packages/extension-table/src/table.ts b/packages/extension-table/src/table.ts index 08f59fb7..c346b1e9 100644 --- a/packages/extension-table/src/table.ts +++ b/packages/extension-table/src/table.ts @@ -19,6 +19,7 @@ import { setCellAttr, fixTables, } from 'prosemirror-tables' +import { NodeView } from 'prosemirror-view' import { TextSelection } from 'prosemirror-state' import { createTable } from './utilities/createTable' import { TableView } from './TableView' @@ -30,7 +31,7 @@ export interface TableOptions { resizable: boolean, handleWidth: number, cellMinWidth: number, - View: TableView, + View: NodeView, lastColumnResizable: boolean, allowTableNodeSelection: boolean, } @@ -66,16 +67,17 @@ export const Table = Node.create({ addCommands() { return { - insertTable: ({ rows, cols, withHeaderRow }): Command => ({ state, dispatch }) => { + insertTable: ({ rows = 3, cols = 3, withHeaderRow = true }): Command => ({ state, dispatch }) => { const offset = state.tr.selection.anchor + 1 - const nodes = createTable(this.editor.schema, rows, cols, withHeaderRow) const tr = state.tr.replaceSelectionWith(nodes).scrollIntoView() const resolvedPos = tr.doc.resolve(offset) - tr.setSelection(TextSelection.near(resolvedPos)) + if (dispatch) { + tr.setSelection(TextSelection.near(resolvedPos)) + } - return dispatch(tr) + return true }, addColumnBefore: (): Command => ({ state, dispatch }) => { return addColumnBefore(state, dispatch) @@ -148,11 +150,15 @@ export const Table = Node.create({ return true } - if (this.editor.commands.addRowAfter()) { - return this.editor.commands.goToNextCell() + if (!this.editor.can().addRowAfter()) { + return false } - return false + return this.editor + .chain() + .addRowAfter() + .goToNextCell() + .run() }, 'Shift-Tab': () => this.editor.commands.goToPreviousCell(), } @@ -164,9 +170,11 @@ export const Table = Node.create({ handleWidth: this.options.handleWidth, cellMinWidth: this.options.cellMinWidth, View: this.options.View, - lastColumnResizable: this.options.lastColumnResizable, + // lastColumnResizable: this.options.lastColumnResizable, })] : []), - tableEditing(this.options.allowTableNodeSelection), + tableEditing({ + allowTableNodeSelection: this.options.allowTableNodeSelection, + }), ] }, }) diff --git a/packages/extension-table/src/utilities/createTable.ts b/packages/extension-table/src/utilities/createTable.ts index 18b41887..429963a8 100644 --- a/packages/extension-table/src/utilities/createTable.ts +++ b/packages/extension-table/src/utilities/createTable.ts @@ -7,7 +7,7 @@ import { createCell } from './createCell' import { getTableNodeTypes } from './getTableNodeTypes' -export function createTable(schema: Schema, rowsCount: 3, colsCount: 3, withHeaderRow: true, cellContent?: Fragment | ProsemirrorNode | Array>) { +export function createTable(schema: Schema, rowsCount: number, colsCount: number, withHeaderRow: boolean, cellContent?: Fragment | ProsemirrorNode | Array>) { const types = getTableNodeTypes(schema) const headerCells = []