handsontable 0.0.0-next-0306a1a-20240826 → 0.0.0-next-1dfe61f-20240910
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.js +126 -0
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.mjs +122 -0
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.js +119 -0
- package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.mjs +115 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.js +125 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.mjs +121 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.js +118 -0
- package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.mjs +114 -0
- package/3rdparty/walkontable/src/calculator/{renderAllColumns.js → calculationType/renderedAllColumns.js} +32 -9
- package/3rdparty/walkontable/src/calculator/{renderAllColumns.mjs → calculationType/renderedAllColumns.mjs} +31 -8
- package/3rdparty/walkontable/src/calculator/{renderAllRows.js → calculationType/renderedAllRows.js} +32 -9
- package/3rdparty/walkontable/src/calculator/{renderAllRows.mjs → calculationType/renderedAllRows.mjs} +31 -8
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +37 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +33 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +37 -0
- package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +33 -0
- package/3rdparty/walkontable/src/calculator/index.js +18 -17
- package/3rdparty/walkontable/src/calculator/index.mjs +11 -6
- package/3rdparty/walkontable/src/calculator/viewportBase.js +92 -0
- package/3rdparty/walkontable/src/calculator/viewportBase.mjs +88 -0
- package/3rdparty/walkontable/src/calculator/viewportColumns.js +51 -145
- package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +51 -145
- package/3rdparty/walkontable/src/calculator/viewportRows.js +59 -141
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +59 -141
- package/3rdparty/walkontable/src/index.js +2 -0
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/renderer/rows.js +10 -0
- package/3rdparty/walkontable/src/renderer/rows.mjs +11 -1
- package/3rdparty/walkontable/src/table.js +5 -11
- package/3rdparty/walkontable/src/table.mjs +5 -11
- package/3rdparty/walkontable/src/utils/column.js +2 -1
- package/3rdparty/walkontable/src/utils/column.mjs +2 -1
- package/3rdparty/walkontable/src/utils/columnStretching.js +10 -19
- package/3rdparty/walkontable/src/utils/columnStretching.mjs +10 -19
- package/3rdparty/walkontable/src/viewport.js +35 -46
- package/3rdparty/walkontable/src/viewport.mjs +36 -47
- package/CHANGELOG.md +27 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.d.ts +1 -2
- package/core.js +1 -1
- package/core.mjs +2 -2
- package/dataMap/metaManager/metaSchema.js +5 -6
- package/dataMap/metaManager/metaSchema.mjs +5 -6
- package/dist/handsontable.css +32 -20
- package/dist/handsontable.full.css +32 -20
- package/dist/handsontable.full.js +2751 -2091
- package/dist/handsontable.full.min.css +5 -5
- package/dist/handsontable.full.min.js +148 -148
- package/dist/handsontable.js +2752 -2092
- package/dist/handsontable.min.css +4 -4
- package/dist/handsontable.min.js +32 -32
- package/editors/autocompleteEditor/autocompleteEditor.d.ts +1 -1
- package/helpers/a11y.js +2 -0
- package/helpers/a11y.mjs +1 -0
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/package.json +1 -1
- package/pluginHooks.d.ts +1 -1
- package/pluginHooks.js +1 -1
- package/pluginHooks.mjs +1 -1
- package/plugins/autoColumnSize/autoColumnSize.js +1 -1
- package/plugins/autoColumnSize/autoColumnSize.mjs +2 -2
- package/plugins/autoRowSize/autoRowSize.js +1 -2
- package/plugins/autoRowSize/autoRowSize.mjs +1 -2
- package/plugins/columnSorting/columnSorting.js +10 -1
- package/plugins/columnSorting/columnSorting.mjs +10 -1
- package/plugins/contextMenu/menu/menuItemRenderer.js +3 -4
- package/plugins/contextMenu/menu/menuItemRenderer.mjs +5 -6
- package/plugins/contextMenu/menu/positioner.js +4 -12
- package/plugins/contextMenu/menu/positioner.mjs +4 -12
- package/plugins/contextMenu/menu/utils.js +11 -0
- package/plugins/contextMenu/menu/utils.mjs +10 -0
- package/plugins/contextMenu/predefinedItems/alignment.js +67 -49
- package/plugins/contextMenu/predefinedItems/alignment.mjs +68 -50
- package/plugins/contextMenu/predefinedItems/readOnly.js +11 -0
- package/plugins/contextMenu/predefinedItems/readOnly.mjs +11 -0
- package/plugins/contextMenu/utils.js +26 -0
- package/plugins/contextMenu/utils.mjs +24 -0
- package/plugins/copyPaste/copyPaste.js +14 -14
- package/plugins/copyPaste/copyPaste.mjs +14 -14
- package/plugins/dropdownMenu/dropdownMenu.js +10 -4
- package/plugins/dropdownMenu/dropdownMenu.mjs +10 -4
- package/plugins/filters/component/condition.js +6 -1
- package/plugins/filters/component/condition.mjs +6 -1
- package/plugins/filters/component/value.js +6 -1
- package/plugins/filters/component/value.mjs +6 -1
- package/plugins/filters/conditionCollection.d.ts +4 -3
- package/plugins/filters/conditionCollection.js +26 -0
- package/plugins/filters/conditionCollection.mjs +26 -0
- package/plugins/filters/filters.js +2 -1
- package/plugins/filters/filters.mjs +2 -1
- package/plugins/filters/ui/multipleSelect.js +7 -9
- package/plugins/filters/ui/multipleSelect.mjs +7 -9
- package/plugins/manualRowResize/manualRowResize.js +1 -1
- package/plugins/manualRowResize/manualRowResize.mjs +2 -2
- package/plugins/mergeCells/cellsCollection.js +11 -9
- package/plugins/mergeCells/cellsCollection.mjs +12 -10
- package/plugins/undoRedo/undoRedo.js +9 -5
- package/plugins/undoRedo/undoRedo.mjs +9 -5
- package/shortcuts/utils.js +3 -1
- package/shortcuts/utils.mjs +3 -1
- package/utils/ghostTable.js +11 -9
- package/utils/ghostTable.mjs +12 -10
- package/3rdparty/walkontable/src/calculator/constants.js +0 -26
- package/3rdparty/walkontable/src/calculator/constants.mjs +0 -23
@@ -1,87 +1,59 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
-
import "core-js/modules/es.array.at.js";
|
3
2
|
import "core-js/modules/es.array.push.js";
|
4
|
-
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
5
|
-
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
6
3
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
7
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
8
5
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
import { RENDER_TYPE, FULLY_VISIBLE_TYPE } from "./constants.mjs";
|
6
|
+
import { ViewportBaseCalculator } from "./viewportBase.mjs";
|
7
|
+
export const DEFAULT_WIDTH = 50;
|
8
|
+
|
13
9
|
/**
|
14
10
|
* @typedef {object} ViewportColumnsCalculatorOptions
|
11
|
+
* @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.
|
15
12
|
* @property {number} viewportWidth Width of the viewport.
|
16
13
|
* @property {number} scrollOffset Current horizontal scroll position of the viewport.
|
17
14
|
* @property {number} totalColumns Total number of columns.
|
18
15
|
* @property {Function} columnWidthFn Function that returns the width of the column at a given index (in px).
|
19
|
-
* @property {Function} overrideFn Function that
|
20
|
-
* MergeCells plugin).
|
21
|
-
* @property {string} calculationType String which describes types of calculation which will be performed.
|
16
|
+
* @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.
|
22
17
|
* @property {string} inlineStartOffset Inline-start offset of the parent container.
|
23
|
-
* @property {string} stretchMode Stretch mode 'all' or 'last'.
|
24
|
-
* @property {Function} stretchingColumnWidthFn Function that returns the new width of the stretched column.
|
25
18
|
*/
|
26
19
|
/**
|
27
|
-
* Calculates indexes of columns to render OR columns that are visible.
|
28
|
-
* To redo the calculation, you need to create a new calculator.
|
20
|
+
* Calculates indexes of columns to render OR columns that are visible OR partially visible in the viewport.
|
29
21
|
*
|
30
22
|
* @class ViewportColumnsCalculator
|
31
23
|
*/
|
32
|
-
|
33
|
-
export class ViewportColumnsCalculator {
|
34
|
-
/**
|
35
|
-
* Default column width.
|
36
|
-
*
|
37
|
-
* @type {number}
|
38
|
-
*/
|
39
|
-
static get DEFAULT_WIDTH() {
|
40
|
-
return 50;
|
41
|
-
}
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Number of rendered/visible columns.
|
45
|
-
*
|
46
|
-
* @type {number}
|
47
|
-
*/
|
48
|
-
|
24
|
+
export class ViewportColumnsCalculator extends ViewportBaseCalculator {
|
49
25
|
/**
|
50
26
|
* @param {ViewportColumnsCalculatorOptions} options Object with all options specified for column viewport calculation.
|
51
27
|
*/
|
52
|
-
constructor(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
_defineProperty(this, "
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
_defineProperty(this, "
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
* @type {ViewportColumnsCalculatorOptions}
|
82
|
-
*/
|
83
|
-
_classPrivateFieldInitSpec(this, _options, void 0);
|
84
|
-
_classPrivateFieldSet(_options, this, options);
|
28
|
+
constructor(_ref) {
|
29
|
+
let {
|
30
|
+
calculationTypes,
|
31
|
+
viewportWidth,
|
32
|
+
scrollOffset,
|
33
|
+
totalColumns,
|
34
|
+
columnWidthFn,
|
35
|
+
overrideFn,
|
36
|
+
inlineStartOffset
|
37
|
+
} = _ref;
|
38
|
+
super(calculationTypes);
|
39
|
+
_defineProperty(this, "viewportWidth", 0);
|
40
|
+
_defineProperty(this, "scrollOffset", 0);
|
41
|
+
_defineProperty(this, "zeroBasedScrollOffset", 0);
|
42
|
+
_defineProperty(this, "totalColumns", 0);
|
43
|
+
_defineProperty(this, "columnWidthFn", null);
|
44
|
+
_defineProperty(this, "columnWidth", 0);
|
45
|
+
_defineProperty(this, "overrideFn", null);
|
46
|
+
_defineProperty(this, "inlineStartOffset", 0);
|
47
|
+
_defineProperty(this, "totalCalculatedWidth", 0);
|
48
|
+
_defineProperty(this, "startPositions", []);
|
49
|
+
_defineProperty(this, "needReverse", true);
|
50
|
+
this.viewportWidth = viewportWidth;
|
51
|
+
this.scrollOffset = scrollOffset;
|
52
|
+
this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);
|
53
|
+
this.totalColumns = totalColumns;
|
54
|
+
this.columnWidthFn = columnWidthFn;
|
55
|
+
this.overrideFn = overrideFn;
|
56
|
+
this.inlineStartOffset = inlineStartOffset;
|
85
57
|
this.calculate();
|
86
58
|
}
|
87
59
|
|
@@ -89,96 +61,30 @@ export class ViewportColumnsCalculator {
|
|
89
61
|
* Calculates viewport.
|
90
62
|
*/
|
91
63
|
calculate() {
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
// +1 pixel for row header width compensation for horizontal scroll > 0
|
101
|
-
const compensatedViewportWidth = zeroBasedScrollOffset > 0 ? viewportWidth + 1 : viewportWidth;
|
102
|
-
let sum = 0;
|
103
|
-
let needReverse = true;
|
104
|
-
const startPositions = [];
|
105
|
-
let columnWidth;
|
106
|
-
let firstVisibleColumnWidth = 0;
|
107
|
-
let lastVisibleColumnWidth = 0;
|
108
|
-
for (let i = 0; i < totalColumns; i++) {
|
109
|
-
columnWidth = this._getColumnWidth(i);
|
110
|
-
if (sum <= zeroBasedScrollOffset && calculationType !== FULLY_VISIBLE_TYPE) {
|
111
|
-
this.startColumn = i;
|
112
|
-
firstVisibleColumnWidth = columnWidth;
|
113
|
-
}
|
114
|
-
if (sum >= zeroBasedScrollOffset && sum + (calculationType === FULLY_VISIBLE_TYPE ? columnWidth : 0) <= zeroBasedScrollOffset + compensatedViewportWidth) {
|
115
|
-
if (this.startColumn === null || this.startColumn === undefined) {
|
116
|
-
this.startColumn = i;
|
117
|
-
firstVisibleColumnWidth = columnWidth;
|
118
|
-
}
|
119
|
-
this.endColumn = i;
|
120
|
-
}
|
121
|
-
startPositions.push(sum);
|
122
|
-
sum += columnWidth;
|
123
|
-
lastVisibleColumnWidth = columnWidth;
|
124
|
-
if (calculationType !== FULLY_VISIBLE_TYPE) {
|
125
|
-
this.endColumn = i;
|
126
|
-
}
|
127
|
-
if (sum >= zeroBasedScrollOffset + viewportWidth) {
|
128
|
-
needReverse = false;
|
64
|
+
this._initialize(this);
|
65
|
+
for (let column = 0; column < this.totalColumns; column++) {
|
66
|
+
this.columnWidth = this.getColumnWidth(column);
|
67
|
+
this._process(column, this);
|
68
|
+
this.startPositions.push(this.totalCalculatedWidth);
|
69
|
+
this.totalCalculatedWidth += this.columnWidth;
|
70
|
+
if (this.totalCalculatedWidth >= this.zeroBasedScrollOffset + this.viewportWidth) {
|
71
|
+
this.needReverse = false;
|
129
72
|
break;
|
130
73
|
}
|
131
74
|
}
|
132
|
-
|
133
|
-
const inlineEndColumnOffset = calculationType === FULLY_VISIBLE_TYPE ? 0 : lastVisibleColumnWidth;
|
134
|
-
const inlineStartColumnOffset = calculationType === FULLY_VISIBLE_TYPE ? firstVisibleColumnWidth : 0;
|
135
|
-
if (
|
136
|
-
// the table is to the left of the viewport
|
137
|
-
mostRightScrollOffset < -1 * _classPrivateFieldGet(_options, this).inlineStartOffset || scrollOffset > startPositions.at(-1) + inlineEndColumnOffset ||
|
138
|
-
// the table is to the right of the viewport
|
139
|
-
-1 * _classPrivateFieldGet(_options, this).scrollOffset - _classPrivateFieldGet(_options, this).viewportWidth > -1 * inlineStartColumnOffset) {
|
140
|
-
this.isVisibleInTrimmingContainer = false;
|
141
|
-
} else {
|
142
|
-
this.isVisibleInTrimmingContainer = true;
|
143
|
-
}
|
144
|
-
if (this.endColumn === totalColumns - 1 && needReverse) {
|
145
|
-
this.startColumn = this.endColumn;
|
146
|
-
while (this.startColumn > 0) {
|
147
|
-
const viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1];
|
148
|
-
if (viewportSum <= viewportWidth || calculationType !== FULLY_VISIBLE_TYPE) {
|
149
|
-
this.startColumn -= 1;
|
150
|
-
}
|
151
|
-
if (viewportSum > viewportWidth) {
|
152
|
-
break;
|
153
|
-
}
|
154
|
-
}
|
155
|
-
}
|
156
|
-
if (calculationType === RENDER_TYPE && this.startColumn !== null && overrideFn) {
|
157
|
-
overrideFn(this);
|
158
|
-
}
|
159
|
-
this.startPosition = startPositions[this.startColumn];
|
160
|
-
if (this.startPosition === undefined) {
|
161
|
-
this.startPosition = null;
|
162
|
-
}
|
163
|
-
|
164
|
-
// If totalColumns exceeded its total columns size set endColumn to the latest item
|
165
|
-
if (totalColumns < this.endColumn) {
|
166
|
-
this.endColumn = totalColumns - 1;
|
167
|
-
}
|
168
|
-
if (this.startColumn !== null) {
|
169
|
-
this.count = this.endColumn - this.startColumn + 1;
|
170
|
-
}
|
75
|
+
this._finalize(this);
|
171
76
|
}
|
172
77
|
|
173
78
|
/**
|
174
|
-
*
|
79
|
+
* Gets the column width at the specified column index.
|
80
|
+
*
|
81
|
+
* @param {number} column Column index.
|
175
82
|
* @returns {number}
|
176
|
-
* @private
|
177
83
|
*/
|
178
|
-
|
179
|
-
|
84
|
+
getColumnWidth(column) {
|
85
|
+
const width = this.columnWidthFn(column);
|
180
86
|
if (isNaN(width)) {
|
181
|
-
|
87
|
+
return DEFAULT_WIDTH;
|
182
88
|
}
|
183
89
|
return width;
|
184
90
|
}
|
@@ -2,86 +2,63 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
require("core-js/modules/es.error.cause.js");
|
5
|
-
require("core-js/modules/es.array.at.js");
|
6
5
|
require("core-js/modules/es.array.push.js");
|
7
|
-
var
|
8
|
-
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
9
|
-
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
6
|
+
var _viewportBase = require("./viewportBase");
|
10
7
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
11
8
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
12
9
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
13
|
-
|
14
|
-
|
15
|
-
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
10
|
+
const DEFAULT_HEIGHT = exports.DEFAULT_HEIGHT = 23;
|
11
|
+
|
16
12
|
/**
|
17
13
|
* @typedef {object} ViewportRowsCalculatorOptions
|
14
|
+
* @property {Map<string, ViewportBaseCalculator>} calculationTypes The calculation types to be performed.
|
18
15
|
* @property {number} viewportHeight Height of the viewport.
|
19
16
|
* @property {number} scrollOffset Current vertical scroll position of the viewport.
|
20
17
|
* @property {number} totalRows Total number of rows.
|
21
18
|
* @property {Function} rowHeightFn Function that returns the height of the row at a given index (in px).
|
22
|
-
* @property {Function} overrideFn Function that
|
23
|
-
* @property {string} calculationType String which describes types of calculation which will be performed.
|
19
|
+
* @property {Function} overrideFn Function that allows to adjust the `startRow` and `endRow` parameters.
|
24
20
|
* @property {number} horizontalScrollbarHeight The scrollbar height.
|
25
21
|
*/
|
26
22
|
/**
|
27
|
-
* Calculates indexes of rows to render OR rows that are visible.
|
28
|
-
* To redo the calculation, you need to create a new calculator.
|
23
|
+
* Calculates indexes of rows to render OR rows that are visible OR partially visible in the viewport.
|
29
24
|
*
|
30
25
|
* @class ViewportRowsCalculator
|
31
26
|
*/
|
32
|
-
|
33
|
-
class ViewportRowsCalculator {
|
34
|
-
/**
|
35
|
-
* Default row height.
|
36
|
-
*
|
37
|
-
* @type {number}
|
38
|
-
*/
|
39
|
-
static get DEFAULT_HEIGHT() {
|
40
|
-
return 23;
|
41
|
-
}
|
42
|
-
|
43
|
-
/**
|
44
|
-
* Number of rendered/visible rows.
|
45
|
-
*
|
46
|
-
* @type {number}
|
47
|
-
*/
|
48
|
-
|
27
|
+
class ViewportRowsCalculator extends _viewportBase.ViewportBaseCalculator {
|
49
28
|
/**
|
50
29
|
* @param {ViewportRowsCalculatorOptions} options Object with all options specified for row viewport calculation.
|
51
30
|
*/
|
52
|
-
constructor(
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
_defineProperty(this, "
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
_defineProperty(this, "
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
_classPrivateFieldInitSpec(this, _options, void 0);
|
84
|
-
_classPrivateFieldSet(_options, this, options);
|
31
|
+
constructor(_ref) {
|
32
|
+
let {
|
33
|
+
calculationTypes,
|
34
|
+
viewportHeight,
|
35
|
+
scrollOffset,
|
36
|
+
totalRows,
|
37
|
+
rowHeightFn,
|
38
|
+
overrideFn,
|
39
|
+
horizontalScrollbarHeight
|
40
|
+
} = _ref;
|
41
|
+
super(calculationTypes);
|
42
|
+
_defineProperty(this, "viewportHeight", 0);
|
43
|
+
_defineProperty(this, "scrollOffset", 0);
|
44
|
+
_defineProperty(this, "zeroBasedScrollOffset", 0);
|
45
|
+
_defineProperty(this, "totalRows", 0);
|
46
|
+
_defineProperty(this, "rowHeightFn", null);
|
47
|
+
_defineProperty(this, "rowHeight", 0);
|
48
|
+
_defineProperty(this, "overrideFn", null);
|
49
|
+
_defineProperty(this, "horizontalScrollbarHeight", 0);
|
50
|
+
_defineProperty(this, "innerViewportHeight", 0);
|
51
|
+
_defineProperty(this, "totalCalculatedHeight", 0);
|
52
|
+
_defineProperty(this, "startPositions", []);
|
53
|
+
_defineProperty(this, "needReverse", true);
|
54
|
+
this.viewportHeight = viewportHeight;
|
55
|
+
this.scrollOffset = scrollOffset;
|
56
|
+
this.zeroBasedScrollOffset = Math.max(scrollOffset, 0);
|
57
|
+
this.totalRows = totalRows;
|
58
|
+
this.rowHeightFn = rowHeightFn;
|
59
|
+
this.overrideFn = overrideFn;
|
60
|
+
this.horizontalScrollbarHeight = horizontalScrollbarHeight !== null && horizontalScrollbarHeight !== void 0 ? horizontalScrollbarHeight : 0;
|
61
|
+
this.innerViewportHeight = this.zeroBasedScrollOffset + this.viewportHeight - this.horizontalScrollbarHeight;
|
85
62
|
this.calculate();
|
86
63
|
}
|
87
64
|
|
@@ -89,91 +66,32 @@ class ViewportRowsCalculator {
|
|
89
66
|
* Calculates viewport.
|
90
67
|
*/
|
91
68
|
calculate() {
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
const zeroBasedScrollOffset = Math.max(_classPrivateFieldGet(_options, this).scrollOffset, 0);
|
101
|
-
const horizontalScrollbarHeight = _classPrivateFieldGet(_options, this).horizontalScrollbarHeight || 0;
|
102
|
-
const innerViewportHeight = zeroBasedScrollOffset + viewportHeight - horizontalScrollbarHeight;
|
103
|
-
let sum = 0;
|
104
|
-
let needReverse = true;
|
105
|
-
const startPositions = [];
|
106
|
-
let rowHeight;
|
107
|
-
let firstVisibleRowHeight = 0;
|
108
|
-
let lastVisibleRowHeight = 0;
|
109
|
-
|
110
|
-
// Calculate the number (start and end index) of rows needed
|
111
|
-
for (let i = 0; i < totalRows; i++) {
|
112
|
-
rowHeight = rowHeightFn(i);
|
113
|
-
if (isNaN(rowHeight)) {
|
114
|
-
rowHeight = ViewportRowsCalculator.DEFAULT_HEIGHT;
|
115
|
-
}
|
116
|
-
if (sum <= zeroBasedScrollOffset && calculationType !== _constants.FULLY_VISIBLE_TYPE) {
|
117
|
-
this.startRow = i;
|
118
|
-
firstVisibleRowHeight = rowHeight;
|
119
|
-
}
|
120
|
-
if (sum >= zeroBasedScrollOffset && sum + (calculationType === _constants.FULLY_VISIBLE_TYPE ? rowHeight : 0) <= innerViewportHeight) {
|
121
|
-
if (this.startRow === null) {
|
122
|
-
this.startRow = i;
|
123
|
-
firstVisibleRowHeight = rowHeight;
|
124
|
-
}
|
125
|
-
this.endRow = i;
|
126
|
-
}
|
127
|
-
startPositions.push(sum);
|
128
|
-
sum += rowHeight;
|
129
|
-
lastVisibleRowHeight = rowHeight;
|
130
|
-
if (calculationType !== _constants.FULLY_VISIBLE_TYPE) {
|
131
|
-
this.endRow = i;
|
132
|
-
}
|
133
|
-
if (sum >= innerViewportHeight) {
|
134
|
-
needReverse = false;
|
69
|
+
this._initialize(this);
|
70
|
+
for (let row = 0; row < this.totalRows; row++) {
|
71
|
+
this.rowHeight = this.getRowHeight(row);
|
72
|
+
this._process(row, this);
|
73
|
+
this.startPositions.push(this.totalCalculatedHeight);
|
74
|
+
this.totalCalculatedHeight += this.rowHeight;
|
75
|
+
if (this.totalCalculatedHeight >= this.innerViewportHeight) {
|
76
|
+
this.needReverse = false;
|
135
77
|
break;
|
136
78
|
}
|
137
79
|
}
|
138
|
-
|
139
|
-
|
140
|
-
const bottomRowOffset = calculationType === _constants.FULLY_VISIBLE_TYPE ? 0 : lastVisibleRowHeight;
|
141
|
-
if (mostBottomScrollOffset < topRowOffset || scrollOffset > startPositions.at(-1) + bottomRowOffset) {
|
142
|
-
this.isVisibleInTrimmingContainer = false;
|
143
|
-
} else {
|
144
|
-
this.isVisibleInTrimmingContainer = true;
|
145
|
-
}
|
146
|
-
|
147
|
-
// If the estimation has reached the last row and there is still some space available in the viewport,
|
148
|
-
// we need to render in reverse in order to fill the whole viewport with rows
|
149
|
-
if (this.endRow === totalRows - 1 && needReverse) {
|
150
|
-
this.startRow = this.endRow;
|
151
|
-
while (this.startRow > 0) {
|
152
|
-
// rowHeight is the height of the last row
|
153
|
-
const viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1];
|
154
|
-
if (viewportSum <= viewportHeight - horizontalScrollbarHeight || calculationType !== _constants.FULLY_VISIBLE_TYPE) {
|
155
|
-
this.startRow -= 1;
|
156
|
-
}
|
157
|
-
if (viewportSum >= viewportHeight - horizontalScrollbarHeight) {
|
158
|
-
break;
|
159
|
-
}
|
160
|
-
}
|
161
|
-
}
|
162
|
-
if (calculationType === _constants.RENDER_TYPE && this.startRow !== null && overrideFn) {
|
163
|
-
overrideFn(this);
|
164
|
-
}
|
165
|
-
this.startPosition = startPositions[this.startRow];
|
166
|
-
if (this.startPosition === undefined) {
|
167
|
-
this.startPosition = null;
|
168
|
-
}
|
80
|
+
this._finalize(this);
|
81
|
+
}
|
169
82
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
83
|
+
/**
|
84
|
+
* Gets the row height at the specified row index.
|
85
|
+
*
|
86
|
+
* @param {number} row Row index.
|
87
|
+
* @returns {number}
|
88
|
+
*/
|
89
|
+
getRowHeight(row) {
|
90
|
+
const rowHeight = this.rowHeightFn(row);
|
91
|
+
if (isNaN(rowHeight)) {
|
92
|
+
return DEFAULT_HEIGHT;
|
176
93
|
}
|
94
|
+
return rowHeight;
|
177
95
|
}
|
178
96
|
}
|
179
97
|
exports.ViewportRowsCalculator = ViewportRowsCalculator;
|