From 1e6f19667e1118b0109906ac9d1c336bace128c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Sat, 23 Jan 2021 00:32:43 +0100 Subject: [PATCH 1/2] refactoring --- packages/extension-table/src/table.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/extension-table/src/table.ts b/packages/extension-table/src/table.ts index 08f59fb7..ffeb6115 100644 --- a/packages/extension-table/src/table.ts +++ b/packages/extension-table/src/table.ts @@ -148,11 +148,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(), } From 1fc50705c6e0c74e737cd3d7277d4b6ad8b8e54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Sat, 23 Jan 2021 13:11:22 +0100 Subject: [PATCH 2/2] improve types --- packages/extension-table/package.json | 3 ++- packages/extension-table/src/TableView.ts | 4 +++- packages/extension-table/src/table.ts | 18 +++++++++++------- .../src/utilities/createTable.ts | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) 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 ffeb6115..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) @@ -168,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 = []