@contrail/document-table 1.0.1 → 1.0.2
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/lib/table-constants.d.ts +0 -8
- package/lib/table-constants.js +1 -9
- package/lib/table-merge.service.js +9 -9
- package/lib/table-paste.service.js +23 -24
- package/lib/table.service.js +34 -34
- package/package.json +2 -2
package/lib/table-constants.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
export declare const TABLE_ROW_MIN_HEIGHT = 28;
|
|
2
2
|
export declare const TABLE_COLUMN_MIN_WIDTH = 28;
|
|
3
|
-
export declare const TABLE_DRAG_HANDLE_WIDTH = 40;
|
|
4
|
-
export declare const TABLE_DRAG_HANDLE_HEIGHT = 20;
|
|
5
|
-
export declare const TABLE_DRAG_HANDLE_PADDING = 40;
|
|
6
|
-
export declare const TABLE_DRAG_HANDLE_RADIUS = 20;
|
|
7
|
-
export declare const TABLE_DRAG_HANDLE_ARROW_X = 3;
|
|
8
|
-
export declare const TABLE_DRAG_HANDLE_ARROW_Y = 4;
|
|
9
|
-
export declare const TABLE_DRAG_HANDLE_ARROW_LENGTH = 7;
|
|
10
|
-
export declare const TABLE_DRAG_HANDLE_ARROW_LINE_WIDTH = 2;
|
|
11
3
|
export declare const TABLE_CELL_WIDTH = 200;
|
|
12
4
|
export declare const TABLE_CELL_HEIGHT = 120;
|
|
13
5
|
export declare const TABLE_TEXT_PADDING = 5;
|
package/lib/table-constants.js
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TEXT_ALIGN = exports.TEXT_VALIGN = exports.DEFAULT_TEXT_FONT_SIZE = exports.DEFAULT_TEXT_FONT_FAMILY = exports.TRANSPARENT_COLOR = exports.TABLE_TEXT_PADDING = exports.TABLE_CELL_HEIGHT = exports.TABLE_CELL_WIDTH = exports.
|
|
3
|
+
exports.TEXT_ALIGN = exports.TEXT_VALIGN = exports.DEFAULT_TEXT_FONT_SIZE = exports.DEFAULT_TEXT_FONT_FAMILY = exports.TRANSPARENT_COLOR = exports.TABLE_TEXT_PADDING = exports.TABLE_CELL_HEIGHT = exports.TABLE_CELL_WIDTH = exports.TABLE_COLUMN_MIN_WIDTH = exports.TABLE_ROW_MIN_HEIGHT = void 0;
|
|
4
4
|
exports.TABLE_ROW_MIN_HEIGHT = 28;
|
|
5
5
|
exports.TABLE_COLUMN_MIN_WIDTH = 28;
|
|
6
|
-
exports.TABLE_DRAG_HANDLE_WIDTH = 40;
|
|
7
|
-
exports.TABLE_DRAG_HANDLE_HEIGHT = 20;
|
|
8
|
-
exports.TABLE_DRAG_HANDLE_PADDING = 40;
|
|
9
|
-
exports.TABLE_DRAG_HANDLE_RADIUS = 20;
|
|
10
|
-
exports.TABLE_DRAG_HANDLE_ARROW_X = 3;
|
|
11
|
-
exports.TABLE_DRAG_HANDLE_ARROW_Y = 4;
|
|
12
|
-
exports.TABLE_DRAG_HANDLE_ARROW_LENGTH = 7;
|
|
13
|
-
exports.TABLE_DRAG_HANDLE_ARROW_LINE_WIDTH = 2;
|
|
14
6
|
exports.TABLE_CELL_WIDTH = 200;
|
|
15
7
|
exports.TABLE_CELL_HEIGHT = 120;
|
|
16
8
|
exports.TABLE_TEXT_PADDING = 5;
|
|
@@ -33,7 +33,7 @@ class TableMergeService {
|
|
|
33
33
|
const rowId = tableElement.rowIds[i];
|
|
34
34
|
for (let j = columnIndex; j < columnIndex + ((_b = cell.colspan) !== null && _b !== void 0 ? _b : 1); j++) {
|
|
35
35
|
const columnId = tableElement.columnIds[j];
|
|
36
|
-
const mergedCell = childElements.find(e => e.type === 'cell' && e.columnId === columnId && e.rowId === rowId);
|
|
36
|
+
const mergedCell = childElements.find((e) => e.type === 'cell' && e.columnId === columnId && e.rowId === rowId);
|
|
37
37
|
if (mergedCell) {
|
|
38
38
|
mergedCells.push(mergedCell);
|
|
39
39
|
}
|
|
@@ -45,7 +45,7 @@ class TableMergeService {
|
|
|
45
45
|
static isValidRangeToMerge(tableElement, childElements, tableRange) {
|
|
46
46
|
if (tableRange.singular())
|
|
47
47
|
return false;
|
|
48
|
-
const mergedRanges = TableMergeService.getMergedRanges(tableElement, childElements).filter(range => range.intersects(tableRange) && !range.within(tableRange));
|
|
48
|
+
const mergedRanges = TableMergeService.getMergedRanges(tableElement, childElements).filter((range) => range.intersects(tableRange) && !range.within(tableRange));
|
|
49
49
|
return mergedRanges.length === 0;
|
|
50
50
|
}
|
|
51
51
|
static merge(tableElement, childElements, tableRange) {
|
|
@@ -59,7 +59,7 @@ class TableMergeService {
|
|
|
59
59
|
tableRange.each((rowIndex, columnIndex) => {
|
|
60
60
|
const rowId = tableElement.rowIds[rowIndex];
|
|
61
61
|
const columnId = tableElement.columnIds[columnIndex];
|
|
62
|
-
const element = childElements.find(e => e.type === 'cell' && e.columnId === columnId && e.rowId === rowId);
|
|
62
|
+
const element = childElements.find((e) => e.type === 'cell' && e.columnId === columnId && e.rowId === rowId);
|
|
63
63
|
if (element) {
|
|
64
64
|
const elementUndo = util_1.ObjectUtil.cloneDeep(element);
|
|
65
65
|
element.colspan = 1;
|
|
@@ -67,9 +67,9 @@ class TableMergeService {
|
|
|
67
67
|
if (tableRange.isStart(rowIndex, columnIndex)) {
|
|
68
68
|
firstCell = element;
|
|
69
69
|
let width = 0;
|
|
70
|
-
tableRange.eachColumn(columnIndex => {
|
|
70
|
+
tableRange.eachColumn((columnIndex) => {
|
|
71
71
|
const columnId = tableElement.columnIds[columnIndex];
|
|
72
|
-
const column = childElements.find(e => e.type === 'column' && e.id === columnId);
|
|
72
|
+
const column = childElements.find((e) => e.type === 'column' && e.id === columnId);
|
|
73
73
|
width = width + column.size.width;
|
|
74
74
|
});
|
|
75
75
|
if (colspan > 1) {
|
|
@@ -96,7 +96,7 @@ class TableMergeService {
|
|
|
96
96
|
}
|
|
97
97
|
static unmerge(tableElement, childElements, tableRange) {
|
|
98
98
|
const mergedRanges = TableMergeService.getMergedRanges(tableElement, childElements);
|
|
99
|
-
if (!mergedRanges.find(range => range.equals(tableRange)))
|
|
99
|
+
if (!mergedRanges.find((range) => range.equals(tableRange)))
|
|
100
100
|
throw new Error(table_service_1.TABLE_ERROR.INVALID_RANGE_TO_UNMERGE);
|
|
101
101
|
const tableUndo = Object.assign(Object.assign({}, (0, table_service_1.tableData)(tableElement)), { size: Object.assign({}, tableElement.size) });
|
|
102
102
|
const elementsToUpdate = [];
|
|
@@ -104,9 +104,9 @@ class TableMergeService {
|
|
|
104
104
|
tableRange.each((rowIndex, columnIndex) => {
|
|
105
105
|
const rowId = tableElement.rowIds[rowIndex];
|
|
106
106
|
const columnId = tableElement.columnIds[columnIndex];
|
|
107
|
-
const element = childElements.find(e => e.type === 'cell' && e.columnId === columnId && e.rowId === rowId);
|
|
108
|
-
const column = childElements.find(e => e.type === 'column' && e.id === columnId);
|
|
109
|
-
const row = childElements.find(e => e.type === 'row' && e.id === rowId);
|
|
107
|
+
const element = childElements.find((e) => e.type === 'cell' && e.columnId === columnId && e.rowId === rowId);
|
|
108
|
+
const column = childElements.find((e) => e.type === 'column' && e.id === columnId);
|
|
109
|
+
const row = childElements.find((e) => e.type === 'row' && e.id === rowId);
|
|
110
110
|
if (element && column && row) {
|
|
111
111
|
const elementUndo = util_1.ObjectUtil.cloneDeep(element);
|
|
112
112
|
element.colspan = 1;
|
|
@@ -13,23 +13,23 @@ class TablePasteService {
|
|
|
13
13
|
}
|
|
14
14
|
static pasteRowsAndColumns(tableElement, childElements, elementsToPaste, targetRow, targetColumn) {
|
|
15
15
|
var _a, _b, _c;
|
|
16
|
-
const tableToPaste = elementsToPaste.find(e => e.type === 'table');
|
|
17
|
-
const rowsToPaste = elementsToPaste.filter(e => e.type === 'row');
|
|
18
|
-
const columnsToPaste = elementsToPaste.filter(e => e.type === 'column');
|
|
19
|
-
const cellsToPaste = elementsToPaste.filter(e => e.type === 'cell');
|
|
16
|
+
const tableToPaste = elementsToPaste.find((e) => e.type === 'table');
|
|
17
|
+
const rowsToPaste = elementsToPaste.filter((e) => e.type === 'row');
|
|
18
|
+
const columnsToPaste = elementsToPaste.filter((e) => e.type === 'column');
|
|
19
|
+
const cellsToPaste = elementsToPaste.filter((e) => e.type === 'cell');
|
|
20
20
|
const startRow = targetRow;
|
|
21
21
|
const endRow = startRow + tableToPaste.rowIds.length - 1;
|
|
22
22
|
const startColumn = targetColumn;
|
|
23
23
|
const endColumn = startColumn + tableToPaste.columnIds.length - 1;
|
|
24
|
-
const existingCells = childElements.filter(e => e.type === 'cell');
|
|
24
|
+
const existingCells = childElements.filter((e) => e.type === 'cell');
|
|
25
25
|
const elementsToCreate = [];
|
|
26
26
|
const elementsToUpdate = [];
|
|
27
27
|
let existingMergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements);
|
|
28
28
|
for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++) {
|
|
29
29
|
const rowToPaste = rowsToPaste[rowIndex - targetRow];
|
|
30
30
|
let existingRowId = tableElement.rowIds[rowIndex];
|
|
31
|
-
let existingRow = childElements.find(e => e.type === 'row' && e.id === existingRowId) ||
|
|
32
|
-
elementsToCreate.find(e => e.type === 'row' && e.id === existingRowId);
|
|
31
|
+
let existingRow = childElements.find((e) => e.type === 'row' && e.id === existingRowId) ||
|
|
32
|
+
elementsToCreate.find((e) => e.type === 'row' && e.id === existingRowId);
|
|
33
33
|
this.log('current row', rowIndex, existingRowId, existingRow);
|
|
34
34
|
if (!existingRowId) {
|
|
35
35
|
const [newRow, ...newRowCells] = (_a = table_service_1.TableService.addRow(tableElement, [...existingCells, ...elementsToCreate], rowIndex, rowToPaste.size.height)) === null || _a === void 0 ? void 0 : _a.elementsToCreate;
|
|
@@ -46,8 +46,8 @@ class TablePasteService {
|
|
|
46
46
|
for (let columnIndex = startColumn; columnIndex <= endColumn; columnIndex++) {
|
|
47
47
|
const columnToPaste = columnsToPaste[columnIndex - targetColumn];
|
|
48
48
|
let existingColumnId = tableElement.columnIds[columnIndex];
|
|
49
|
-
let existingColumn = childElements.find(e => e.type === 'column' && e.id === existingColumnId) ||
|
|
50
|
-
elementsToCreate.find(e => e.type === 'column' && e.id === existingColumnId);
|
|
49
|
+
let existingColumn = childElements.find((e) => e.type === 'column' && e.id === existingColumnId) ||
|
|
50
|
+
elementsToCreate.find((e) => e.type === 'column' && e.id === existingColumnId);
|
|
51
51
|
this.log('current column', columnIndex, existingColumnId, existingColumn);
|
|
52
52
|
if (!tableElement.columnIds[columnIndex]) {
|
|
53
53
|
const [newColumn, ...newColumnCells] = (_b = table_service_1.TableService.addColumn(tableElement, [...existingCells, ...elementsToCreate], columnIndex, columnToPaste.size.width)) === null || _b === void 0 ? void 0 : _b.elementsToCreate;
|
|
@@ -58,22 +58,21 @@ class TablePasteService {
|
|
|
58
58
|
}
|
|
59
59
|
if (columnToPaste.size.width > existingColumn.size.width) {
|
|
60
60
|
const updatedColumn = table_service_1.TableService.resizeColumn(tableElement, childElements, existingColumnId, columnToPaste.size.width).elementsToUpdate[1];
|
|
61
|
-
const updatedRowAndCells = table_service_1.TableService.autoFitRows(tableElement, childElements, existingColumnId)
|
|
62
|
-
.elementsToUpdate;
|
|
61
|
+
const updatedRowAndCells = table_service_1.TableService.autoFitRows(tableElement, childElements, existingColumnId).elementsToUpdate;
|
|
63
62
|
const uniqueUpdatedRowAndCells = (0, documents_1.uniqueElementsToUpdate)(updatedRowAndCells, elementsToUpdate);
|
|
64
63
|
elementsToUpdate.push(updatedColumn);
|
|
65
64
|
elementsToUpdate.push(...uniqueUpdatedRowAndCells);
|
|
66
65
|
this.log('resized column', columnIndex, existingColumnId, existingColumn);
|
|
67
66
|
this.log('resized column cells and row', uniqueUpdatedRowAndCells, uniqueUpdatedRowAndCells);
|
|
68
67
|
}
|
|
69
|
-
const cellToPaste = cellsToPaste.find(e => e.rowId === rowToPaste.id && e.columnId === columnToPaste.id);
|
|
68
|
+
const cellToPaste = cellsToPaste.find((e) => e.rowId === rowToPaste.id && e.columnId === columnToPaste.id);
|
|
70
69
|
if (!cellToPaste)
|
|
71
70
|
continue;
|
|
72
71
|
const cellRange = new table_range_1.TableRange(rowIndex, rowIndex, columnIndex, columnIndex);
|
|
73
|
-
const mergedRange = existingMergedRanges.find(range => range.intersects(cellRange));
|
|
72
|
+
const mergedRange = existingMergedRanges.find((range) => range.intersects(cellRange));
|
|
74
73
|
const mergedRangeOther = mergedRange && !cellRange.equals(mergedRange.start());
|
|
75
74
|
if (mergedRange) {
|
|
76
|
-
existingMergedRanges = existingMergedRanges.filter(r => !r.equals(mergedRange));
|
|
75
|
+
existingMergedRanges = existingMergedRanges.filter((r) => !r.equals(mergedRange));
|
|
77
76
|
}
|
|
78
77
|
if (mergedRangeOther) {
|
|
79
78
|
const [updatedTable, ...unmergedCellAndRow] = (_c = table_merge_service_1.TableMergeService.unmerge(tableElement, childElements, mergedRange)) === null || _c === void 0 ? void 0 : _c.elementsToUpdate;
|
|
@@ -86,15 +85,15 @@ class TablePasteService {
|
|
|
86
85
|
return { elementsToCreate, elementsToUpdate };
|
|
87
86
|
}
|
|
88
87
|
static pasteTableCells(tableElement, childElements, elementsToPaste, targetRow, targetColumn) {
|
|
89
|
-
const tableToPaste = elementsToPaste.find(e => e.type === 'table');
|
|
90
|
-
const rowsToPaste = elementsToPaste.filter(e => e.type === 'row');
|
|
91
|
-
const columnsToPaste = elementsToPaste.filter(e => e.type === 'column');
|
|
92
|
-
const cellsToPaste = elementsToPaste.filter(e => e.type === 'cell');
|
|
88
|
+
const tableToPaste = elementsToPaste.find((e) => e.type === 'table');
|
|
89
|
+
const rowsToPaste = elementsToPaste.filter((e) => e.type === 'row');
|
|
90
|
+
const columnsToPaste = elementsToPaste.filter((e) => e.type === 'column');
|
|
91
|
+
const cellsToPaste = elementsToPaste.filter((e) => e.type === 'cell');
|
|
93
92
|
const startRow = targetRow;
|
|
94
93
|
const endRow = startRow + tableToPaste.rowIds.length - 1;
|
|
95
94
|
const startColumn = targetColumn;
|
|
96
95
|
const endColumn = startColumn + tableToPaste.columnIds.length - 1;
|
|
97
|
-
const existingCells = childElements.filter(e => e.type === 'cell');
|
|
96
|
+
const existingCells = childElements.filter((e) => e.type === 'cell');
|
|
98
97
|
const tableUndo = util_1.ObjectUtil.cloneDeep(tableElement);
|
|
99
98
|
const { elementsToUpdate, elementsToCreate } = TablePasteService.pasteRowsAndColumns(tableElement, childElements, elementsToPaste, targetRow, targetColumn);
|
|
100
99
|
for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++) {
|
|
@@ -103,13 +102,13 @@ class TablePasteService {
|
|
|
103
102
|
for (let columnIndex = startColumn; columnIndex <= endColumn; columnIndex++) {
|
|
104
103
|
const columnToPaste = columnsToPaste[columnIndex - targetColumn];
|
|
105
104
|
const existingColumnId = tableElement.columnIds[columnIndex];
|
|
106
|
-
const existingColumn = childElements.find(e => e.type === 'column' && e.id === existingColumnId) ||
|
|
107
|
-
elementsToCreate.find(e => e.type === 'column' && e.id === existingColumnId);
|
|
108
|
-
const cellToPaste = cellsToPaste.find(e => e.rowId === rowToPaste.id && e.columnId === columnToPaste.id);
|
|
105
|
+
const existingColumn = childElements.find((e) => e.type === 'column' && e.id === existingColumnId) ||
|
|
106
|
+
elementsToCreate.find((e) => e.type === 'column' && e.id === existingColumnId);
|
|
107
|
+
const cellToPaste = cellsToPaste.find((e) => e.rowId === rowToPaste.id && e.columnId === columnToPaste.id);
|
|
109
108
|
if (!cellToPaste)
|
|
110
109
|
continue;
|
|
111
|
-
const createdCell = elementsToCreate.find(e => e.type === 'cell' && e.rowId === existingRowId && e.columnId === existingColumnId);
|
|
112
|
-
const existingCell = existingCells.find(e => e.rowId === existingRowId && e.columnId === existingColumnId);
|
|
110
|
+
const createdCell = elementsToCreate.find((e) => e.type === 'cell' && e.rowId === existingRowId && e.columnId === existingColumnId);
|
|
111
|
+
const existingCell = existingCells.find((e) => e.rowId === existingRowId && e.columnId === existingColumnId);
|
|
113
112
|
const cell = createdCell !== null && createdCell !== void 0 ? createdCell : existingCell;
|
|
114
113
|
const cellUndo = util_1.ObjectUtil.cloneDeep(cell);
|
|
115
114
|
this.log('cell to paste', cellToPaste);
|
package/lib/table.service.js
CHANGED
|
@@ -120,11 +120,11 @@ class TableService {
|
|
|
120
120
|
static addColumn(tableElement, childElements, index, optionalWidth) {
|
|
121
121
|
const prevColumnId = tableElement.columnIds[Math.max(0, index - 1)];
|
|
122
122
|
const prevColumnCells = TableService.getCellsAtColumn(prevColumnId, tableElement, childElements);
|
|
123
|
-
const width = optionalWidth != null ? optionalWidth : childElements.find(e => e.id === prevColumnId).size.width;
|
|
124
|
-
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter(range => range.startColumn < index && index <= range.endColumn);
|
|
123
|
+
const width = optionalWidth != null ? optionalWidth : childElements.find((e) => e.id === prevColumnId).size.width;
|
|
124
|
+
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter((range) => range.startColumn < index && index <= range.endColumn);
|
|
125
125
|
const cellsToUpdate = [];
|
|
126
126
|
if (mergedRanges.length > 0) {
|
|
127
|
-
const columnIndexes = [...new Set(mergedRanges.map(range => range.startColumn))];
|
|
127
|
+
const columnIndexes = [...new Set(mergedRanges.map((range) => range.startColumn))];
|
|
128
128
|
for (const columnIndex of columnIndexes) {
|
|
129
129
|
const targetColumnId = tableElement.columnIds[columnIndex];
|
|
130
130
|
const targetCells = this.getCellsAtColumn(targetColumnId, tableElement, childElements);
|
|
@@ -208,19 +208,19 @@ class TableService {
|
|
|
208
208
|
}
|
|
209
209
|
static getCellsAtColumn(columnId, tableElement, childElements) {
|
|
210
210
|
return childElements
|
|
211
|
-
.filter(element => element.type === 'cell' && element.columnId === columnId)
|
|
211
|
+
.filter((element) => element.type === 'cell' && element.columnId === columnId)
|
|
212
212
|
.sort((a, b) => tableElement.rowIds.indexOf(a.rowId) - tableElement.rowIds.indexOf(b.rowId));
|
|
213
213
|
}
|
|
214
214
|
static getCellsAtRow(rowId, tableElement, childElements) {
|
|
215
215
|
return childElements
|
|
216
|
-
.filter(element => element.type === 'cell' && element.rowId === rowId)
|
|
216
|
+
.filter((element) => element.type === 'cell' && element.rowId === rowId)
|
|
217
217
|
.sort((a, b) => tableElement.columnIds.indexOf(a.columnId) - tableElement.columnIds.indexOf(b.columnId));
|
|
218
218
|
}
|
|
219
219
|
static addRow(tableElement, childElements, index, optionalHeight) {
|
|
220
|
-
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter(range => range.startRow < index && index <= range.endRow);
|
|
220
|
+
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter((range) => range.startRow < index && index <= range.endRow);
|
|
221
221
|
const cellsToUpdate = [];
|
|
222
222
|
if (mergedRanges.length > 0) {
|
|
223
|
-
const rowIndexes = [...new Set(mergedRanges.map(range => range.startRow))];
|
|
223
|
+
const rowIndexes = [...new Set(mergedRanges.map((range) => range.startRow))];
|
|
224
224
|
for (const rowIndex of rowIndexes) {
|
|
225
225
|
const targetRowId = tableElement.rowIds[rowIndex];
|
|
226
226
|
const targetCells = this.getCellsAtRow(targetRowId, tableElement, childElements);
|
|
@@ -248,7 +248,7 @@ class TableService {
|
|
|
248
248
|
}
|
|
249
249
|
const prevRowId = tableElement.rowIds[Math.max(0, index - 1)];
|
|
250
250
|
const prevRowCells = TableService.getCellsAtRow(prevRowId, tableElement, childElements);
|
|
251
|
-
const height = optionalHeight != null ? optionalHeight : childElements.find(e => e.id === prevRowId).size.height;
|
|
251
|
+
const height = optionalHeight != null ? optionalHeight : childElements.find((e) => e.id === prevRowId).size.height;
|
|
252
252
|
const rowId = (0, nanoid_1.nanoid)(16);
|
|
253
253
|
const row = {
|
|
254
254
|
id: rowId,
|
|
@@ -306,7 +306,7 @@ class TableService {
|
|
|
306
306
|
const elementsMap = new Map();
|
|
307
307
|
for (const range of ranges) {
|
|
308
308
|
range.each((rowIndex, columnIndex) => {
|
|
309
|
-
const cell = childElements.find(e => e.type === 'cell' &&
|
|
309
|
+
const cell = childElements.find((e) => e.type === 'cell' &&
|
|
310
310
|
e.rowId === tableElement.rowIds[rowIndex] &&
|
|
311
311
|
e.columnId === tableElement.columnIds[columnIndex]);
|
|
312
312
|
if (cell && !elementsMap.get(cell.id)) {
|
|
@@ -325,13 +325,13 @@ class TableService {
|
|
|
325
325
|
if (columnIdsToDelete.length === tableElement.columnIds.length) {
|
|
326
326
|
return this.deleteTable(tableElement, childElements);
|
|
327
327
|
}
|
|
328
|
-
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter(range => columnIndexes.filter(columnIndex => range.intersectsCol(columnIndex, columnIndex)).length > 0);
|
|
329
|
-
const columnsToDelete = columnIdsToDelete.map(columnId => childElements.find(e => e.type === 'column' && e.id === columnId));
|
|
330
|
-
const cellsToDelete = childElements.filter(e => e.type === 'cell' && columnIdsToDelete.indexOf(e.columnId) !== -1);
|
|
328
|
+
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter((range) => columnIndexes.filter((columnIndex) => range.intersectsCol(columnIndex, columnIndex)).length > 0);
|
|
329
|
+
const columnsToDelete = columnIdsToDelete.map((columnId) => childElements.find((e) => e.type === 'column' && e.id === columnId));
|
|
330
|
+
const cellsToDelete = childElements.filter((e) => e.type === 'cell' && columnIdsToDelete.indexOf(e.columnId) !== -1);
|
|
331
331
|
let deleteAllowed = true;
|
|
332
332
|
if (mergedRanges.length > 0) {
|
|
333
333
|
for (const cell of this.getCellsAtRanges(tableElement, childElements, mergedRanges)) {
|
|
334
|
-
if (!cellsToDelete.find(e => e.id === cell.id)) {
|
|
334
|
+
if (!cellsToDelete.find((e) => e.id === cell.id)) {
|
|
335
335
|
deleteAllowed = false;
|
|
336
336
|
break;
|
|
337
337
|
}
|
|
@@ -347,7 +347,7 @@ class TableService {
|
|
|
347
347
|
size: Object.assign({}, tableElement.size),
|
|
348
348
|
columnIds: [...tableElement.columnIds],
|
|
349
349
|
};
|
|
350
|
-
tableElement.columnIds = tableElement.columnIds.filter(id => columnIdsToDelete.indexOf(id) === -1);
|
|
350
|
+
tableElement.columnIds = tableElement.columnIds.filter((id) => columnIdsToDelete.indexOf(id) === -1);
|
|
351
351
|
tableElement.size.width =
|
|
352
352
|
tableElement.size.width - columnsToDelete.reduce((totalWidth, element) => totalWidth + element.size.width, 0);
|
|
353
353
|
return {
|
|
@@ -371,13 +371,13 @@ class TableService {
|
|
|
371
371
|
if (rowIdsToDelete.length === tableElement.rowIds.length) {
|
|
372
372
|
return this.deleteTable(tableElement, childElements);
|
|
373
373
|
}
|
|
374
|
-
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter(range => rowIndexes.filter(rowIndex => range.intersectsRow(rowIndex, rowIndex)).length > 0);
|
|
375
|
-
const rowsToDelete = rowIdsToDelete.map(rowId => childElements.find(e => e.type === 'row' && e.id === rowId));
|
|
376
|
-
const cellsToDelete = childElements.filter(e => e.type === 'cell' && rowIdsToDelete.indexOf(e.rowId) !== -1);
|
|
374
|
+
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements).filter((range) => rowIndexes.filter((rowIndex) => range.intersectsRow(rowIndex, rowIndex)).length > 0);
|
|
375
|
+
const rowsToDelete = rowIdsToDelete.map((rowId) => childElements.find((e) => e.type === 'row' && e.id === rowId));
|
|
376
|
+
const cellsToDelete = childElements.filter((e) => e.type === 'cell' && rowIdsToDelete.indexOf(e.rowId) !== -1);
|
|
377
377
|
let deleteAllowed = true;
|
|
378
378
|
if (mergedRanges.length > 0) {
|
|
379
379
|
for (const cell of this.getCellsAtRanges(tableElement, childElements, mergedRanges)) {
|
|
380
|
-
if (!cellsToDelete.find(e => e.id === cell.id)) {
|
|
380
|
+
if (!cellsToDelete.find((e) => e.id === cell.id)) {
|
|
381
381
|
deleteAllowed = false;
|
|
382
382
|
break;
|
|
383
383
|
}
|
|
@@ -393,7 +393,7 @@ class TableService {
|
|
|
393
393
|
size: Object.assign({}, tableElement.size),
|
|
394
394
|
rowIds: [...tableElement.rowIds],
|
|
395
395
|
};
|
|
396
|
-
tableElement.rowIds = tableElement.rowIds.filter(id => rowIdsToDelete.indexOf(id) === -1);
|
|
396
|
+
tableElement.rowIds = tableElement.rowIds.filter((id) => rowIdsToDelete.indexOf(id) === -1);
|
|
397
397
|
tableElement.size.height =
|
|
398
398
|
tableElement.size.height - rowsToDelete.reduce((totalHeight, element) => totalHeight + element.size.height, 0);
|
|
399
399
|
return {
|
|
@@ -415,9 +415,9 @@ class TableService {
|
|
|
415
415
|
static move(key, tableElement, childElements, from, to) {
|
|
416
416
|
const isColumn = key === 'columnIds';
|
|
417
417
|
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements);
|
|
418
|
-
const fromMergedRanges = mergedRanges.filter(range => isColumn ? range.cols > 0 && range.intersectsCol(from, from) : range.rows > 0 && range.intersectsRow(from, from));
|
|
418
|
+
const fromMergedRanges = mergedRanges.filter((range) => isColumn ? range.cols > 0 && range.intersectsCol(from, from) : range.rows > 0 && range.intersectsRow(from, from));
|
|
419
419
|
const indexIncrement = from < to ? 1 : 0;
|
|
420
|
-
const toMergedRanges = mergedRanges.filter(range => isColumn
|
|
420
|
+
const toMergedRanges = mergedRanges.filter((range) => isColumn
|
|
421
421
|
? range.startColumn - indexIncrement < to && to <= range.endColumn - indexIncrement
|
|
422
422
|
: range.startRow - indexIncrement < to && to <= range.endRow - indexIncrement);
|
|
423
423
|
if (fromMergedRanges.length > 0 || toMergedRanges.length > 0) {
|
|
@@ -435,12 +435,12 @@ class TableService {
|
|
|
435
435
|
};
|
|
436
436
|
}
|
|
437
437
|
static resizeRow(tableElement, childElements, rowId, height) {
|
|
438
|
-
const row = childElements.find(e => e.type === 'row' && e.id === rowId);
|
|
438
|
+
const row = childElements.find((e) => e.type === 'row' && e.id === rowId);
|
|
439
439
|
const rowUndo = Object.assign(Object.assign({}, tableData(row)), { size: Object.assign({}, row.size) });
|
|
440
440
|
const tableUndo = Object.assign(Object.assign({}, tableData(tableElement)), { size: Object.assign({}, tableElement.size) });
|
|
441
441
|
row.size.height = height;
|
|
442
442
|
tableElement.size.height = childElements
|
|
443
|
-
.filter(e => e.type === 'row')
|
|
443
|
+
.filter((e) => e.type === 'row')
|
|
444
444
|
.reduce((acc, row) => acc + row.size.height, 0);
|
|
445
445
|
return {
|
|
446
446
|
elementsToUpdate: [
|
|
@@ -456,12 +456,12 @@ class TableService {
|
|
|
456
456
|
};
|
|
457
457
|
}
|
|
458
458
|
static resizeColumn(tableElement, childElements, columnId, width) {
|
|
459
|
-
const column = childElements.find(e => e.type === 'column' && e.id === columnId);
|
|
459
|
+
const column = childElements.find((e) => e.type === 'column' && e.id === columnId);
|
|
460
460
|
const columnUndo = Object.assign(Object.assign({}, tableData(column)), { size: Object.assign({}, column.size) });
|
|
461
461
|
const tableUndo = Object.assign(Object.assign({}, tableData(tableElement)), { size: Object.assign({}, tableElement.size) });
|
|
462
462
|
column.size.width = width;
|
|
463
463
|
tableElement.size.width = childElements
|
|
464
|
-
.filter(e => e.type === 'column')
|
|
464
|
+
.filter((e) => e.type === 'column')
|
|
465
465
|
.reduce((acc, column) => acc + column.size.width, 0);
|
|
466
466
|
return {
|
|
467
467
|
elementsToUpdate: [
|
|
@@ -479,7 +479,7 @@ class TableService {
|
|
|
479
479
|
static getColumns(tableElement, childElements) {
|
|
480
480
|
const columns = [];
|
|
481
481
|
for (const columnId of tableElement.columnIds) {
|
|
482
|
-
const column = childElements.find(e => e.type === 'column' && e.id === columnId);
|
|
482
|
+
const column = childElements.find((e) => e.type === 'column' && e.id === columnId);
|
|
483
483
|
if (!column)
|
|
484
484
|
throw new Error(TABLE_ERROR.INVALID_TABLE);
|
|
485
485
|
columns.push(column);
|
|
@@ -500,7 +500,7 @@ class TableService {
|
|
|
500
500
|
static getRows(tableElement, childElements) {
|
|
501
501
|
const rows = [];
|
|
502
502
|
for (const rowId of tableElement.rowIds) {
|
|
503
|
-
const row = childElements.find(e => e.type === 'row' && e.id === rowId);
|
|
503
|
+
const row = childElements.find((e) => e.type === 'row' && e.id === rowId);
|
|
504
504
|
if (!row)
|
|
505
505
|
throw new Error(TABLE_ERROR.INVALID_TABLE);
|
|
506
506
|
rows.push(row);
|
|
@@ -526,12 +526,12 @@ class TableService {
|
|
|
526
526
|
throw new Error(TABLE_ERROR.INVALID_TABLE);
|
|
527
527
|
const cellRange = new table_range_1.TableRange(rowIndex, rowIndex, columnIndex, columnIndex);
|
|
528
528
|
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements);
|
|
529
|
-
const mergedRange = mergedRanges.find(range => cellRange.within(range));
|
|
529
|
+
const mergedRange = mergedRanges.find((range) => cellRange.within(range));
|
|
530
530
|
if (mergedRange) {
|
|
531
531
|
const mergedRangeStart = mergedRange && cellRange.equals(mergedRange.start());
|
|
532
532
|
const mergedCell = mergedRangeStart
|
|
533
533
|
? cell
|
|
534
|
-
: childElements.find(e => e.type === 'cell' &&
|
|
534
|
+
: childElements.find((e) => e.type === 'cell' &&
|
|
535
535
|
e.rowId === tableElement.rowIds[mergedRange.startRow] &&
|
|
536
536
|
e.columnId === tableElement.columnIds[mergedRange.startColumn]);
|
|
537
537
|
height =
|
|
@@ -544,20 +544,20 @@ class TableService {
|
|
|
544
544
|
var _a;
|
|
545
545
|
const elementsToUpdate = [];
|
|
546
546
|
const columnIndex = tableElement.columnIds.indexOf(columnId);
|
|
547
|
-
const column = childElements.find(e => e.type === 'column' && e.id === columnId);
|
|
547
|
+
const column = childElements.find((e) => e.type === 'column' && e.id === columnId);
|
|
548
548
|
const mergedRanges = table_merge_service_1.TableMergeService.getMergedRanges(tableElement, childElements);
|
|
549
549
|
for (const [rowIndex, rowId] of tableElement.rowIds.entries()) {
|
|
550
|
-
const row = childElements.find(e => e.type === 'row' && e.id === rowId);
|
|
551
|
-
const cell = childElements.find(e => e.type === 'cell' && e.rowId === rowId && e.columnId === columnId);
|
|
550
|
+
const row = childElements.find((e) => e.type === 'row' && e.id === rowId);
|
|
551
|
+
const cell = childElements.find((e) => e.type === 'cell' && e.rowId === rowId && e.columnId === columnId);
|
|
552
552
|
if (!row || !cell)
|
|
553
553
|
continue;
|
|
554
554
|
const cellUndo = util_1.ObjectUtil.cloneDeep(cell);
|
|
555
555
|
const cellRange = new table_range_1.TableRange(rowIndex, rowIndex, columnIndex, columnIndex);
|
|
556
|
-
const mergedRange = mergedRanges.find(range => cellRange.within(range));
|
|
556
|
+
const mergedRange = mergedRanges.find((range) => cellRange.within(range));
|
|
557
557
|
const mergedRangeStart = mergedRange && cellRange.equals(mergedRange.start());
|
|
558
558
|
const mergedRangeOther = mergedRange && !cellRange.equals(mergedRange.start());
|
|
559
559
|
if (mergedRangeOther) {
|
|
560
|
-
const mergedCell = childElements.find(e => e.type === 'cell' &&
|
|
560
|
+
const mergedCell = childElements.find((e) => e.type === 'cell' &&
|
|
561
561
|
e.rowId === tableElement.rowIds[mergedRange.startRow] &&
|
|
562
562
|
e.columnId === tableElement.columnIds[mergedRange.startColumn]);
|
|
563
563
|
if (rowIndex === mergedRange.endRow && columnIndex !== mergedRange.startColumn) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contrail/document-table",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Library for document tables",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@contrail/actions": "^1.0.14",
|
|
42
|
-
"@contrail/documents": "^1.0.
|
|
42
|
+
"@contrail/documents": "^1.0.109",
|
|
43
43
|
"@contrail/types": "^3.0.71",
|
|
44
44
|
"@contrail/util": "^1.0.65",
|
|
45
45
|
"reflect-metadata": "^0.1.13"
|