Skip to content

Commit 52ef503

Browse files
authored
fix(YfmTableAdditions): fix positioning of floating buttons of yfm-table (#232)
1 parent 64d81a6 commit 52ef503

File tree

1 file changed

+26
-35
lines changed
  • src/extensions/behavior/YfmTableAdditions/YfmTableControls

1 file changed

+26
-35
lines changed

src/extensions/behavior/YfmTableAdditions/YfmTableControls/buttons.tsx

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import {Fragment} from 'prosemirror-model';
12
import {Plugin, PluginKey} from 'prosemirror-state';
23
import {
3-
findChildren,
44
findParentNode,
55
findParentNodeClosestToPos,
66
findSelectedNodeOfType,
@@ -14,6 +14,7 @@ import {
1414
isTableNode,
1515
isTableRowNode,
1616
} from '../../../../table-utils';
17+
import {getChildrenOfNode} from '../../../../utils';
1718
import {YfmTableNode} from '../const';
1819

1920
import {viewB, yfmTableView} from './view';
@@ -88,43 +89,33 @@ export const tableControlsPlugin = () =>
8889
const pos = view.posAtCoords({left: e.x, top: e.y});
8990
if (!pos) return false;
9091

91-
const cell = findParentNodeClosestToPos(
92-
view.state.doc.resolve(pos.pos),
93-
isTableCellNode,
94-
);
95-
const table = findParentNodeClosestToPos(
96-
view.state.doc.resolve(pos.pos),
97-
isTableBodyNode,
98-
);
92+
const $pos = view.state.doc.resolve(pos.pos);
93+
const cell = findParentNodeClosestToPos($pos, isTableCellNode);
94+
const row = findParentNodeClosestToPos($pos, isTableRowNode);
95+
const tbody = findParentNodeClosestToPos($pos, isTableBodyNode);
9996

10097
let state: State = null;
10198

102-
if (cell && table) {
103-
const contentDom = view.domAtPos(cell.pos + 1).node as HTMLElement;
104-
const rowNumber = contentDom.getAttribute('data-row-number');
105-
const colNumber = contentDom.getAttribute('data-col-number');
106-
107-
const rows = findChildren(table.node, isTableRowNode);
108-
const parentRow = rows[Number(rowNumber)];
109-
const firstRow = rows[0];
110-
const parentCol = findChildren(rows[0].node, isTableCellNode)[
111-
Number(colNumber)
112-
];
113-
114-
const rowFrom = parentRow.pos + table.start;
115-
const rowTo = parentRow.pos + parentRow.node.nodeSize + table.start;
116-
const firstRowFrom = firstRow.pos + table.start;
117-
118-
state = {
119-
upper: {
120-
from: parentCol.pos + firstRowFrom + 1,
121-
to: parentCol.pos + firstRowFrom + 1 + parentCol.node.nodeSize,
122-
},
123-
left: {
124-
from: rowFrom,
125-
to: rowTo,
126-
},
127-
};
99+
if (cell && row && tbody) {
100+
const cellIndex = getChildrenOfNode(row.node).findIndex(
101+
(child) => child.node === cell.node,
102+
);
103+
const firstRowCell = getChildrenOfNode(
104+
tbody.node.firstChild || Fragment.empty,
105+
)[cellIndex];
106+
107+
if (firstRowCell) {
108+
const upperFrom = tbody.pos + 2 + firstRowCell.offset;
109+
const upperTo = upperFrom + firstRowCell.node.nodeSize;
110+
111+
const leftFrom = row.pos;
112+
const leftTo = row.pos + row.node.nodeSize;
113+
114+
state = {
115+
upper: {from: upperFrom, to: upperTo},
116+
left: {from: leftFrom, to: leftTo},
117+
};
118+
}
128119
}
129120

130121
if (shouldUpdateState(prevState, state)) {

0 commit comments

Comments
 (0)