@atlaskit/editor-plugin-table 7.5.5 → 7.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/event-handlers.js +25 -9
- package/dist/cjs/nodeviews/OverflowShadowsObserver.js +24 -15
- package/dist/cjs/nodeviews/TableCell.js +5 -30
- package/dist/cjs/nodeviews/TableComponent.js +74 -24
- package/dist/cjs/nodeviews/TableContainer.js +19 -17
- package/dist/cjs/nodeviews/TableResizer.js +1 -1
- package/dist/cjs/plugin.js +2 -3
- package/dist/cjs/pm-plugins/main.js +3 -18
- package/dist/cjs/ui/TableFloatingColumnControls/index.js +8 -48
- package/dist/cjs/ui/TableFloatingControls/index.js +113 -223
- package/dist/cjs/utils/column-controls.js +5 -5
- package/dist/cjs/utils/dom.js +13 -15
- package/dist/es2019/event-handlers.js +25 -9
- package/dist/es2019/nodeviews/OverflowShadowsObserver.js +24 -15
- package/dist/es2019/nodeviews/TableCell.js +1 -24
- package/dist/es2019/nodeviews/TableComponent.js +63 -27
- package/dist/es2019/nodeviews/TableContainer.js +16 -18
- package/dist/es2019/nodeviews/TableResizer.js +1 -1
- package/dist/es2019/plugin.js +2 -3
- package/dist/es2019/pm-plugins/main.js +3 -18
- package/dist/es2019/ui/TableFloatingColumnControls/index.js +5 -27
- package/dist/es2019/ui/TableFloatingControls/index.js +119 -193
- package/dist/es2019/utils/column-controls.js +6 -6
- package/dist/es2019/utils/dom.js +13 -15
- package/dist/esm/event-handlers.js +25 -9
- package/dist/esm/nodeviews/OverflowShadowsObserver.js +24 -15
- package/dist/esm/nodeviews/TableCell.js +5 -30
- package/dist/esm/nodeviews/TableComponent.js +74 -24
- package/dist/esm/nodeviews/TableContainer.js +20 -18
- package/dist/esm/nodeviews/TableResizer.js +1 -1
- package/dist/esm/plugin.js +2 -3
- package/dist/esm/pm-plugins/main.js +3 -18
- package/dist/esm/ui/TableFloatingColumnControls/index.js +8 -48
- package/dist/esm/ui/TableFloatingControls/index.js +113 -224
- package/dist/esm/utils/column-controls.js +6 -6
- package/dist/esm/utils/dom.js +13 -15
- package/dist/types/event-handlers.d.ts +3 -4
- package/dist/types/nodeviews/OverflowShadowsObserver.d.ts +3 -1
- package/dist/types/nodeviews/TableCell.d.ts +1 -5
- package/dist/types/nodeviews/TableComponent.d.ts +4 -0
- package/dist/types/nodeviews/TableContainer.d.ts +4 -2
- package/dist/types/types.d.ts +0 -3
- package/dist/types/ui/TableFloatingColumnControls/index.d.ts +2 -1
- package/dist/types/ui/TableFloatingControls/index.d.ts +5 -22
- package/dist/types/utils/dom.d.ts +10 -2
- package/dist/types-ts4.5/event-handlers.d.ts +3 -4
- package/dist/types-ts4.5/nodeviews/OverflowShadowsObserver.d.ts +3 -1
- package/dist/types-ts4.5/nodeviews/TableCell.d.ts +1 -5
- package/dist/types-ts4.5/nodeviews/TableComponent.d.ts +4 -0
- package/dist/types-ts4.5/nodeviews/TableContainer.d.ts +4 -2
- package/dist/types-ts4.5/types.d.ts +0 -3
- package/dist/types-ts4.5/ui/TableFloatingColumnControls/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/TableFloatingControls/index.d.ts +5 -22
- package/dist/types-ts4.5/utils/dom.d.ts +10 -2
- package/package.json +3 -4
- package/src/event-handlers.ts +105 -103
- package/src/nodeviews/OverflowShadowsObserver.ts +32 -21
- package/src/nodeviews/TableCell.ts +0 -26
- package/src/nodeviews/TableComponent.tsx +76 -32
- package/src/nodeviews/TableContainer.tsx +19 -25
- package/src/nodeviews/TableResizer.tsx +1 -4
- package/src/plugin.tsx +5 -4
- package/src/pm-plugins/main.ts +3 -22
- package/src/types.ts +0 -4
- package/src/ui/TableFloatingColumnControls/index.tsx +5 -29
- package/src/ui/TableFloatingControls/index.tsx +155 -241
- package/src/utils/column-controls.ts +5 -6
- package/src/utils/dom.ts +12 -19
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useCallback } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { TableColumnOrdering } from '@atlaskit/custom-steps';
|
|
4
4
|
import { browser } from '@atlaskit/editor-common/utils';
|
|
@@ -10,13 +10,12 @@ import { hoverCell, hoverRows, selectRow, selectRows } from '../../commands';
|
|
|
10
10
|
import type { RowStickyState } from '../../pm-plugins/sticky-headers';
|
|
11
11
|
import { TableCssClassName as ClassName } from '../../types';
|
|
12
12
|
import type { CellHoverMeta } from '../../types';
|
|
13
|
-
import { isSelectionUpdated } from '../../utils';
|
|
14
13
|
|
|
15
14
|
import { CornerControls, DragCornerControls } from './CornerControls';
|
|
16
15
|
import NumberColumn from './NumberColumn';
|
|
17
16
|
import { DragControls, RowControls } from './RowControls';
|
|
18
17
|
|
|
19
|
-
export interface
|
|
18
|
+
export interface TableFloatingControlsProps {
|
|
20
19
|
editorView: EditorView;
|
|
21
20
|
selection?: Selection;
|
|
22
21
|
tableRef?: HTMLTableElement;
|
|
@@ -36,248 +35,163 @@ export interface Props {
|
|
|
36
35
|
ordering?: TableColumnOrdering;
|
|
37
36
|
stickyHeader?: RowStickyState;
|
|
38
37
|
insertRowButtonIndex?: number;
|
|
38
|
+
tableWrapperWidth?: number;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
shouldComponentUpdate(nextProps: Props, nextState: State) {
|
|
94
|
-
const {
|
|
95
|
-
tableRef,
|
|
96
|
-
isInDanger,
|
|
97
|
-
isResizing,
|
|
98
|
-
isHeaderRowEnabled,
|
|
99
|
-
isNumberColumnEnabled,
|
|
100
|
-
hoveredRows,
|
|
101
|
-
selection,
|
|
102
|
-
tableActive,
|
|
103
|
-
isHeaderColumnEnabled,
|
|
104
|
-
ordering,
|
|
105
|
-
headerRowHeight,
|
|
106
|
-
stickyHeader,
|
|
107
|
-
hoveredCell,
|
|
108
|
-
isTableHovered,
|
|
109
|
-
} = this.props;
|
|
110
|
-
return (
|
|
111
|
-
this.state.tableWrapperWidth !== nextState.tableWrapperWidth ||
|
|
112
|
-
this.state.tableWrapperHeight !== nextState.tableWrapperHeight ||
|
|
113
|
-
ordering !== nextProps.ordering ||
|
|
114
|
-
tableRef !== nextProps.tableRef ||
|
|
115
|
-
tableActive !== nextProps.tableActive ||
|
|
116
|
-
isInDanger !== nextProps.isInDanger ||
|
|
117
|
-
isResizing !== nextProps.isResizing ||
|
|
118
|
-
hoveredRows !== nextProps.hoveredRows ||
|
|
119
|
-
isHeaderRowEnabled !== nextProps.isHeaderRowEnabled ||
|
|
120
|
-
isHeaderColumnEnabled !== nextProps.isHeaderColumnEnabled ||
|
|
121
|
-
isNumberColumnEnabled !== nextProps.isNumberColumnEnabled ||
|
|
122
|
-
isSelectionUpdated(selection!, nextProps.selection) ||
|
|
123
|
-
headerRowHeight !== nextProps.headerRowHeight ||
|
|
124
|
-
stickyHeader !== nextProps.stickyHeader ||
|
|
125
|
-
hoveredCell !== nextProps.hoveredCell ||
|
|
126
|
-
isTableHovered !== nextProps.isTableHovered
|
|
127
|
-
);
|
|
128
|
-
}
|
|
41
|
+
export const TableFloatingControls = ({
|
|
42
|
+
editorView,
|
|
43
|
+
tableRef,
|
|
44
|
+
tableNode,
|
|
45
|
+
isInDanger,
|
|
46
|
+
isResizing,
|
|
47
|
+
isNumberColumnEnabled,
|
|
48
|
+
isHeaderRowEnabled,
|
|
49
|
+
isHeaderColumnEnabled,
|
|
50
|
+
tableActive,
|
|
51
|
+
hasHeaderRow,
|
|
52
|
+
hoveredRows,
|
|
53
|
+
stickyHeader,
|
|
54
|
+
isDragAndDropEnabled,
|
|
55
|
+
hoveredCell,
|
|
56
|
+
isTableHovered,
|
|
57
|
+
tableWrapperWidth,
|
|
58
|
+
}: TableFloatingControlsProps) => {
|
|
59
|
+
const _selectRow = useCallback(
|
|
60
|
+
(row: number, expand: boolean) => {
|
|
61
|
+
const { state, dispatch } = editorView;
|
|
62
|
+
// fix for issue ED-4665
|
|
63
|
+
if (browser.ie_version === 11) {
|
|
64
|
+
(editorView.dom as HTMLElement).blur();
|
|
65
|
+
}
|
|
66
|
+
selectRow(row, expand)(state, dispatch);
|
|
67
|
+
},
|
|
68
|
+
[editorView],
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
const _selectRows = useCallback(
|
|
72
|
+
(rowIndexes: number[]) => {
|
|
73
|
+
const { state, dispatch } = editorView;
|
|
74
|
+
// fix for issue ED-4665
|
|
75
|
+
if (browser.ie_version === 11) {
|
|
76
|
+
(editorView.dom as HTMLElement).blur();
|
|
77
|
+
}
|
|
78
|
+
selectRows(rowIndexes)(state, dispatch);
|
|
79
|
+
},
|
|
80
|
+
[editorView],
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
const _hoverRows = useCallback(
|
|
84
|
+
(rows: Array<number>, danger?: boolean) => {
|
|
85
|
+
const { state, dispatch } = editorView;
|
|
86
|
+
hoverRows(rows, danger)(state, dispatch);
|
|
87
|
+
},
|
|
88
|
+
[editorView],
|
|
89
|
+
);
|
|
129
90
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
91
|
+
// re-use across numbered columns and row controls
|
|
92
|
+
const updateCellHoverLocation = useCallback(
|
|
93
|
+
(rowIndex: number) => {
|
|
94
|
+
const { state, dispatch } = editorView;
|
|
95
|
+
|
|
96
|
+
if (tableActive) {
|
|
97
|
+
// For context: Whenever we mouse over a column or row drag handle, we will ALWAYS be hovering over the 0 index
|
|
98
|
+
// of the opposite dimension. For example; here when we mouse over the row drag handle then we're technically
|
|
99
|
+
// also hovering over column 0 index. And vice-versa with columns. This means we don't need to worry about knowing the
|
|
100
|
+
// current column index. We can just force it to 0.
|
|
101
|
+
hoverCell(rowIndex, 0)(state, dispatch);
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
[editorView, tableActive],
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
if (!tableRef) {
|
|
108
|
+
return null;
|
|
134
109
|
}
|
|
135
110
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
editorView={editorView}
|
|
218
|
-
tableRef={tableRef}
|
|
219
|
-
isInDanger={isInDanger}
|
|
220
|
-
isResizing={isResizing}
|
|
221
|
-
isHeaderRowEnabled={isHeaderRowEnabled}
|
|
222
|
-
isHeaderColumnEnabled={isHeaderColumnEnabled}
|
|
223
|
-
hoveredRows={hoveredRows}
|
|
224
|
-
stickyTop={tableActive ? stickyTop : undefined}
|
|
225
|
-
/>
|
|
226
|
-
<RowControls
|
|
227
|
-
editorView={editorView}
|
|
228
|
-
tableRef={tableRef}
|
|
229
|
-
hoverRows={this.hoverRows}
|
|
230
|
-
hoveredRows={hoveredRows}
|
|
231
|
-
isInDanger={isInDanger}
|
|
232
|
-
isResizing={isResizing}
|
|
233
|
-
selectRow={this.selectRow}
|
|
234
|
-
stickyTop={tableActive ? stickyTop : undefined}
|
|
235
|
-
/>
|
|
236
|
-
</>
|
|
237
|
-
)}
|
|
238
|
-
</>
|
|
239
|
-
)}
|
|
240
|
-
</div>
|
|
111
|
+
const stickyTop =
|
|
112
|
+
stickyHeader && stickyHeader.sticky && hasHeaderRow
|
|
113
|
+
? stickyHeader.top
|
|
114
|
+
: undefined;
|
|
115
|
+
|
|
116
|
+
const wrapperClassName = isDragAndDropEnabled
|
|
117
|
+
? ClassName.DRAG_ROW_CONTROLS_WRAPPER
|
|
118
|
+
: ClassName.ROW_CONTROLS_WRAPPER;
|
|
119
|
+
|
|
120
|
+
return (
|
|
121
|
+
<div className={wrapperClassName}>
|
|
122
|
+
<div onMouseDown={(e) => !isDragAndDropEnabled && e.preventDefault()}>
|
|
123
|
+
{isNumberColumnEnabled ? (
|
|
124
|
+
<NumberColumn
|
|
125
|
+
editorView={editorView}
|
|
126
|
+
hoverRows={_hoverRows}
|
|
127
|
+
tableRef={tableRef}
|
|
128
|
+
tableActive={tableActive}
|
|
129
|
+
hoveredRows={hoveredRows}
|
|
130
|
+
hasHeaderRow={hasHeaderRow}
|
|
131
|
+
isInDanger={isInDanger}
|
|
132
|
+
isResizing={isResizing}
|
|
133
|
+
selectRow={_selectRow}
|
|
134
|
+
updateCellHoverLocation={updateCellHoverLocation}
|
|
135
|
+
stickyTop={stickyTop}
|
|
136
|
+
isDragAndDropEnabled={isDragAndDropEnabled}
|
|
137
|
+
/>
|
|
138
|
+
) : null}
|
|
139
|
+
|
|
140
|
+
{tableActive && (
|
|
141
|
+
<>
|
|
142
|
+
{isDragAndDropEnabled ? (
|
|
143
|
+
<>
|
|
144
|
+
<DragCornerControls
|
|
145
|
+
editorView={editorView}
|
|
146
|
+
tableRef={tableRef}
|
|
147
|
+
isInDanger={isInDanger}
|
|
148
|
+
isResizing={isResizing}
|
|
149
|
+
/>
|
|
150
|
+
<DragControls
|
|
151
|
+
tableRef={tableRef}
|
|
152
|
+
tableNode={tableNode}
|
|
153
|
+
hoveredCell={hoveredCell}
|
|
154
|
+
isTableHovered={isTableHovered}
|
|
155
|
+
editorView={editorView}
|
|
156
|
+
tableActive={tableActive}
|
|
157
|
+
isInDanger={isInDanger}
|
|
158
|
+
isResizing={isResizing}
|
|
159
|
+
tableWidth={tableWrapperWidth!}
|
|
160
|
+
hoverRows={_hoverRows}
|
|
161
|
+
selectRow={_selectRow}
|
|
162
|
+
selectRows={_selectRows}
|
|
163
|
+
updateCellHoverLocation={updateCellHoverLocation}
|
|
164
|
+
/>
|
|
165
|
+
</>
|
|
166
|
+
) : (
|
|
167
|
+
<>
|
|
168
|
+
<CornerControls
|
|
169
|
+
editorView={editorView}
|
|
170
|
+
tableRef={tableRef}
|
|
171
|
+
isInDanger={isInDanger}
|
|
172
|
+
isResizing={isResizing}
|
|
173
|
+
isHeaderRowEnabled={isHeaderRowEnabled}
|
|
174
|
+
isHeaderColumnEnabled={isHeaderColumnEnabled}
|
|
175
|
+
hoveredRows={hoveredRows}
|
|
176
|
+
stickyTop={tableActive ? stickyTop : undefined}
|
|
177
|
+
/>
|
|
178
|
+
<RowControls
|
|
179
|
+
editorView={editorView}
|
|
180
|
+
tableRef={tableRef}
|
|
181
|
+
hoverRows={_hoverRows}
|
|
182
|
+
hoveredRows={hoveredRows}
|
|
183
|
+
isInDanger={isInDanger}
|
|
184
|
+
isResizing={isResizing}
|
|
185
|
+
selectRow={_selectRow}
|
|
186
|
+
stickyTop={tableActive ? stickyTop : undefined}
|
|
187
|
+
/>
|
|
188
|
+
</>
|
|
189
|
+
)}
|
|
190
|
+
</>
|
|
191
|
+
)}
|
|
241
192
|
</div>
|
|
242
|
-
|
|
243
|
-
|
|
193
|
+
</div>
|
|
194
|
+
);
|
|
195
|
+
};
|
|
244
196
|
|
|
245
|
-
|
|
246
|
-
const { editorView } = this.props;
|
|
247
|
-
const { state, dispatch } = editorView;
|
|
248
|
-
// fix for issue ED-4665
|
|
249
|
-
if (browser.ie_version === 11) {
|
|
250
|
-
(editorView.dom as HTMLElement).blur();
|
|
251
|
-
}
|
|
252
|
-
selectRow(row, expand)(state, dispatch);
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
private selectRows = (rowIndexes: number[]) => {
|
|
256
|
-
const { editorView } = this.props;
|
|
257
|
-
const { state, dispatch } = editorView;
|
|
258
|
-
// fix for issue ED-4665
|
|
259
|
-
if (browser.ie_version === 11) {
|
|
260
|
-
(editorView.dom as HTMLElement).blur();
|
|
261
|
-
}
|
|
262
|
-
selectRows(rowIndexes)(state, dispatch);
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
private hoverRows = (rows: Array<number>, danger?: boolean) => {
|
|
266
|
-
const { state, dispatch } = this.props.editorView;
|
|
267
|
-
hoverRows(rows, danger)(state, dispatch);
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
// re-use across numbered columns and row controls
|
|
271
|
-
private updateCellHoverLocation = (rowIndex: number) => {
|
|
272
|
-
const { editorView, tableActive } = this.props;
|
|
273
|
-
const { state, dispatch } = editorView;
|
|
274
|
-
|
|
275
|
-
if (tableActive) {
|
|
276
|
-
// For context: Whenever we mouse over a column or row drag handle, we will ALWAYS be hovering over the 0 index
|
|
277
|
-
// of the opposite dimension. For example; here when we mouse over the row drag handle then we're technically
|
|
278
|
-
// also hovering over column 0 index. And vice-versa with columns. This means we don't need to worry about knowing the
|
|
279
|
-
// current column index. We can just force it to 0.
|
|
280
|
-
hoverCell(rowIndex, 0)(state, dispatch);
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
}
|
|
197
|
+
export default TableFloatingControls;
|
|
@@ -6,7 +6,6 @@ import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
|
|
|
6
6
|
import { TableMap } from '@atlaskit/editor-tables/table-map';
|
|
7
7
|
import {
|
|
8
8
|
findTable,
|
|
9
|
-
getCellsInColumn,
|
|
10
9
|
getSelectionRect,
|
|
11
10
|
isColumnSelected,
|
|
12
11
|
isTableSelected,
|
|
@@ -34,13 +33,13 @@ export const getColumnsWidths = (
|
|
|
34
33
|
// When there is no cell we need to fill it with undefined
|
|
35
34
|
widths = Array.from({ length: map.width });
|
|
36
35
|
for (let i = 0; i < map.width; i++) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const cellRef = findDomRefAtPos(
|
|
36
|
+
if (!map.isCellMergedTopLeft(0, i)) {
|
|
37
|
+
const node = table.node.nodeAt(map.map[i])!;
|
|
38
|
+
const pos = map.map[i] + table.start;
|
|
39
|
+
const cellRef = findDomRefAtPos(pos, domAtPos) as HTMLElement;
|
|
41
40
|
const rect = cellRef.getBoundingClientRect();
|
|
42
41
|
widths[i] = (rect ? rect.width : cellRef.offsetWidth) + 1;
|
|
43
|
-
i +=
|
|
42
|
+
i += node.attrs.colspan - 1;
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
}
|
package/src/utils/dom.ts
CHANGED
|
@@ -4,9 +4,6 @@ import {
|
|
|
4
4
|
} from '@atlaskit/editor-common/utils';
|
|
5
5
|
|
|
6
6
|
import { TableCssClassName as ClassName } from '../types';
|
|
7
|
-
import type { ElementContentRects } from '../types';
|
|
8
|
-
|
|
9
|
-
const SELECTOR_TABLE_LEAFS = `.${ClassName.TABLE_CELL}, .${ClassName.TABLE_HEADER_CELL}`;
|
|
10
7
|
|
|
11
8
|
export const isCell = (node: HTMLElement | null): boolean => {
|
|
12
9
|
return Boolean(
|
|
@@ -118,29 +115,25 @@ export const isDragCornerButton = (node: HTMLElement | null) =>
|
|
|
118
115
|
*
|
|
119
116
|
* the same is valid to the right side.
|
|
120
117
|
*/
|
|
121
|
-
|
|
118
|
+
/**
|
|
119
|
+
* This can be used with mouse events to determine the left/right side of the target the pointer is closest too.
|
|
120
|
+
*
|
|
121
|
+
* WARNING: This metod reads properties which can trigger a reflow; use this wisely.
|
|
122
|
+
*
|
|
123
|
+
* @param mouseEvent
|
|
124
|
+
* @param gapInPixels
|
|
125
|
+
* @returns
|
|
126
|
+
*/
|
|
122
127
|
export const getMousePositionHorizontalRelativeByElement = (
|
|
123
128
|
mouseEvent: MouseEvent,
|
|
124
|
-
|
|
129
|
+
offsetX: number,
|
|
125
130
|
gapInPixels?: number,
|
|
126
|
-
isDragAndDropEnabled?: boolean,
|
|
127
131
|
): 'left' | 'right' | null => {
|
|
128
132
|
const element = mouseEvent.target;
|
|
129
133
|
|
|
130
134
|
if (element instanceof HTMLElement) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if (isDragAndDropEnabled) {
|
|
134
|
-
// mouse event fires for new overlapping column controls, so the cell can not get detected. Get width
|
|
135
|
-
// directly from element that will be .pm-table-drag-columns-floating-insert-dot-wrapper
|
|
136
|
-
width = element.clientWidth;
|
|
137
|
-
} else {
|
|
138
|
-
const closestCell = element.closest(SELECTOR_TABLE_LEAFS);
|
|
139
|
-
|
|
140
|
-
const id = closestCell?.id ?? '';
|
|
141
|
-
width = elementContentRects?.[id]?.width ?? 0;
|
|
142
|
-
}
|
|
143
|
-
x = mouseEvent.offsetX;
|
|
135
|
+
const width = element.clientWidth; // reflow
|
|
136
|
+
const x = !Number.isNaN(offsetX) ? offsetX : mouseEvent.offsetX; // reflow
|
|
144
137
|
|
|
145
138
|
if (width <= 0) {
|
|
146
139
|
return null;
|