@semcore/data-table 2.0.0 → 2.2.1
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 +18 -0
- package/lib/cjs/Body.js +277 -78
- package/lib/cjs/Body.js.map +1 -1
- package/lib/cjs/DataTable.js +194 -159
- package/lib/cjs/DataTable.js.map +1 -1
- package/lib/cjs/Head.js +15 -8
- package/lib/cjs/Head.js.map +1 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/style/data-table.shadow.css +11 -0
- package/lib/cjs/types.js +4 -0
- package/lib/cjs/types.js.map +1 -0
- package/lib/cjs/utils.js +26 -26
- package/lib/cjs/utils.js.map +1 -1
- package/lib/es6/Body.js +277 -78
- package/lib/es6/Body.js.map +1 -1
- package/lib/es6/DataTable.js +196 -157
- package/lib/es6/DataTable.js.map +1 -1
- package/lib/es6/Head.js +16 -8
- package/lib/es6/Head.js.map +1 -1
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/style/data-table.shadow.css +11 -0
- package/lib/es6/types.js +2 -0
- package/lib/es6/types.js.map +1 -0
- package/lib/es6/utils.js +20 -24
- package/lib/es6/utils.js.map +1 -1
- package/package.json +3 -2
- package/src/Body.tsx +257 -0
- package/src/DataTable.tsx +443 -0
- package/src/{Head.jsx → Head.tsx} +29 -11
- package/src/{index.js → index.ts} +0 -0
- package/src/style/data-table.shadow.css +11 -0
- package/src/types.ts +53 -0
- package/src/utils.ts +55 -0
- package/lib/types/index.d.ts +0 -99
- package/src/Body.jsx +0 -119
- package/src/DataTable.jsx +0 -283
- package/src/index.d.ts +0 -99
- package/src/utils.js +0 -54
package/lib/es6/Body.js
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
1
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
4
4
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
5
5
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
6
|
+
import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
|
|
6
7
|
import _inherits from "@babel/runtime/helpers/inherits";
|
|
7
8
|
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
8
9
|
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
10
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
9
11
|
import { sstyled as _sstyled } from "@semcore/core";
|
|
10
12
|
import { assignProps as _assignProps } from "@semcore/core";
|
|
11
|
-
var _excluded = ["
|
|
12
|
-
_excluded2 = ["
|
|
13
|
+
var _excluded = ["childrenPropsGetter"],
|
|
14
|
+
_excluded2 = ["childrenPropsGetter"];
|
|
13
15
|
|
|
14
16
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
15
17
|
|
|
16
18
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
17
19
|
|
|
20
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
21
|
+
|
|
22
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
+
|
|
24
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
25
|
+
|
|
18
26
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
19
27
|
|
|
20
28
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
@@ -24,7 +32,8 @@ import { Component, sstyled, Root } from '@semcore/core';
|
|
|
24
32
|
import { Box, Flex } from '@semcore/flex-box';
|
|
25
33
|
import ScrollArea from '@semcore/scroll-area';
|
|
26
34
|
import { getFixedStyle, getScrollOffsetValue } from './utils';
|
|
27
|
-
import assignProps from '@semcore/utils/lib/assignProps';
|
|
35
|
+
import assignProps, { callAllEventHandlers } from '@semcore/utils/lib/assignProps';
|
|
36
|
+
import ResizeObserver from 'resize-observer-polyfill';
|
|
28
37
|
|
|
29
38
|
/*__reshadow-styles__:"./style/scroll-area.shadow.css"*/
|
|
30
39
|
var scrollStyles = (
|
|
@@ -40,14 +49,15 @@ _sstyled.insert(
|
|
|
40
49
|
"--left": "--left_1jfuf14",
|
|
41
50
|
"--right": "--right_1jfuf14"
|
|
42
51
|
});
|
|
52
|
+
import trottle from '@semcore/utils/lib/rafTrottle';
|
|
43
53
|
var testEnv = process.env.NODE_ENV === 'test';
|
|
44
54
|
|
|
45
|
-
function getCellsByColumn(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return
|
|
49
|
-
}
|
|
50
|
-
}
|
|
55
|
+
var getCellsByColumn = function getCellsByColumn(cells) {
|
|
56
|
+
var flattenCells = cells.flat(20);
|
|
57
|
+
return Object.fromEntries(flattenCells.map(function (cell) {
|
|
58
|
+
return [cell.name, cell.data];
|
|
59
|
+
}));
|
|
60
|
+
};
|
|
51
61
|
|
|
52
62
|
var Body = /*#__PURE__*/function (_Component) {
|
|
53
63
|
_inherits(Body, _Component);
|
|
@@ -55,58 +65,99 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
55
65
|
var _super = _createSuper(Body);
|
|
56
66
|
|
|
57
67
|
function Body() {
|
|
68
|
+
var _this;
|
|
69
|
+
|
|
58
70
|
_classCallCheck(this, Body);
|
|
59
71
|
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
73
|
+
args[_key] = arguments[_key];
|
|
74
|
+
}
|
|
62
75
|
|
|
63
|
-
|
|
64
|
-
key: "renderRows",
|
|
65
|
-
value: function renderRows(rows) {
|
|
66
|
-
var _this = this;
|
|
76
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
67
77
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
var _ref2;
|
|
74
|
-
|
|
75
|
-
var cellsByColumn = row._row || getCellsByColumn(row);
|
|
76
|
-
var props = $propsRow.reduce(function (acc, _ref5) {
|
|
77
|
-
var _ref5$getRowProps = _ref5.getRowProps,
|
|
78
|
-
getRowProps = _ref5$getRowProps === void 0 ? function (p) {
|
|
79
|
-
return p;
|
|
80
|
-
} : _ref5$getRowProps,
|
|
81
|
-
other = _objectWithoutProperties(_ref5, _excluded);
|
|
78
|
+
_defineProperty(_assertThisInitialized(_this), "state", {
|
|
79
|
+
rowHeight: undefined,
|
|
80
|
+
scrollAreaHeight: undefined,
|
|
81
|
+
scrollOffset: 0
|
|
82
|
+
});
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
84
|
+
_defineProperty(_assertThisInitialized(_this), "firstRowRef", React.createRef());
|
|
85
|
+
|
|
86
|
+
_defineProperty(_assertThisInitialized(_this), "firstRowResizeObserver", null);
|
|
87
|
+
|
|
88
|
+
_defineProperty(_assertThisInitialized(_this), "getRowHeight", function () {
|
|
89
|
+
var virtualScroll = _this.asProps.virtualScroll;
|
|
90
|
+
var rowHeightFromProps = _typeof(virtualScroll) === 'object' && virtualScroll?.rowHeight;
|
|
91
|
+
return rowHeightFromProps || _this.state.rowHeight;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
_defineProperty(_assertThisInitialized(_this), "handleFirstRowResize", trottle(function (entries) {
|
|
95
|
+
var contentRect = entries[0].contentRect;
|
|
96
|
+
var height = contentRect.height;
|
|
97
|
+
|
|
98
|
+
_this.setState(function (oldState) {
|
|
99
|
+
if (oldState.rowHeight === height) return oldState;
|
|
100
|
+
return {
|
|
101
|
+
rowHeight: height
|
|
102
|
+
};
|
|
93
103
|
});
|
|
94
|
-
}
|
|
95
|
-
|
|
104
|
+
}));
|
|
105
|
+
|
|
106
|
+
_defineProperty(_assertThisInitialized(_this), "handleScrollAreaResize", trottle(function (entries) {
|
|
107
|
+
var virtualScroll = _this.asProps.virtualScroll;
|
|
108
|
+
if (!virtualScroll) return;
|
|
109
|
+
var contentRect = entries[0].contentRect;
|
|
110
|
+
var height = contentRect.height;
|
|
111
|
+
|
|
112
|
+
_this.setState(function (oldState) {
|
|
113
|
+
if (oldState.scrollAreaHeight === height) return oldState;
|
|
114
|
+
return {
|
|
115
|
+
scrollAreaHeight: height
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}));
|
|
119
|
+
|
|
120
|
+
_defineProperty(_assertThisInitialized(_this), "handleScrollAreaScroll", function (event) {
|
|
121
|
+
var _ref5 = event.target,
|
|
122
|
+
scrollTop = _ref5.scrollTop;
|
|
123
|
+
var virtualScroll = _this.asProps.virtualScroll;
|
|
124
|
+
|
|
125
|
+
if (virtualScroll) {
|
|
126
|
+
_this.setState(function (oldState) {
|
|
127
|
+
if (oldState.scrollOffset === scrollTop) return oldState;
|
|
128
|
+
return {
|
|
129
|
+
scrollOffset: scrollTop
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
_defineProperty(_assertThisInitialized(_this), "setupRowSizeObserver", function () {
|
|
136
|
+
if (!_this.firstRowRef.current) return;
|
|
137
|
+
if (!_this.asProps.virtualScroll) return;
|
|
138
|
+
_this.firstRowResizeObserver = new ResizeObserver(_this.handleFirstRowResize);
|
|
139
|
+
|
|
140
|
+
_this.firstRowResizeObserver.observe(_this.firstRowRef.current);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
return _this;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
_createClass(Body, [{
|
|
96
147
|
key: "renderCells",
|
|
97
|
-
value: function renderCells(
|
|
148
|
+
value: function renderCells(cells, rowData, index) {
|
|
98
149
|
var _this2 = this;
|
|
99
150
|
|
|
100
151
|
var SCell = Flex;
|
|
101
|
-
var _this$
|
|
102
|
-
styles = _this$
|
|
103
|
-
columns = _this$
|
|
104
|
-
use = _this$
|
|
105
|
-
return
|
|
152
|
+
var _this$asProps = this.asProps,
|
|
153
|
+
styles = _this$asProps.styles,
|
|
154
|
+
columns = _this$asProps.columns,
|
|
155
|
+
use = _this$asProps.use;
|
|
156
|
+
return cells.map(function (cell) {
|
|
106
157
|
if (Array.isArray(cell)) {
|
|
107
|
-
|
|
158
|
+
return /*#__PURE__*/React.createElement("div", null, _this2.renderRows(cell));
|
|
108
159
|
} else {
|
|
109
|
-
var
|
|
160
|
+
var _ref2;
|
|
110
161
|
|
|
111
162
|
var column = columns.find(function (c) {
|
|
112
163
|
return c.name === cell.name;
|
|
@@ -117,52 +168,191 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
117
168
|
name = _getFixedStyle2[0],
|
|
118
169
|
value = _getFixedStyle2[1];
|
|
119
170
|
|
|
120
|
-
var vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(function (
|
|
121
|
-
return "var(".concat(
|
|
171
|
+
var vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(function (name) {
|
|
172
|
+
return "var(".concat(name, ")");
|
|
122
173
|
});
|
|
123
|
-
var props =
|
|
124
|
-
var _ref6$getCellProps = _ref6.getCellProps,
|
|
125
|
-
getCellProps = _ref6$getCellProps === void 0 ? function (p) {
|
|
126
|
-
return p;
|
|
127
|
-
} : _ref6$getCellProps,
|
|
128
|
-
other = _objectWithoutProperties(_ref6, _excluded2);
|
|
129
|
-
|
|
130
|
-
var propsCell = assignProps(other, acc);
|
|
131
|
-
return assignProps(getCellProps(propsCell, cellsByColumn, index), propsCell);
|
|
132
|
-
}, {
|
|
174
|
+
var props = {
|
|
133
175
|
name: cell.name,
|
|
134
|
-
children: cell.data,
|
|
135
|
-
justifyContent: column
|
|
136
|
-
style:
|
|
137
|
-
|
|
138
|
-
|
|
176
|
+
children: /*#__PURE__*/React.createElement(React.Fragment, null, cell.data),
|
|
177
|
+
justifyContent: column?.props?.justifyContent,
|
|
178
|
+
style: {
|
|
179
|
+
width: vars.length === 1 ? vars[0] : "calc(".concat(vars.join(' + '), ")")
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
if (name !== undefined && value !== undefined) {
|
|
184
|
+
props.style[name] = value;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
var _iterator = _createForOfIteratorHelper(cell.cellPropsLayers || []),
|
|
188
|
+
_step;
|
|
189
|
+
|
|
190
|
+
try {
|
|
191
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
192
|
+
var cellPropLayer = _step.value;
|
|
193
|
+
|
|
194
|
+
var _cellPropLayer$childr = cellPropLayer.childrenPropsGetter,
|
|
195
|
+
childrenPropsGetter = _cellPropLayer$childr === void 0 ? function (p) {
|
|
196
|
+
return p;
|
|
197
|
+
} : _cellPropLayer$childr,
|
|
198
|
+
other = _objectWithoutProperties(cellPropLayer, _excluded);
|
|
199
|
+
|
|
200
|
+
var propsCell = assignProps(other, props);
|
|
201
|
+
props = assignProps(childrenPropsGetter(propsCell, rowData, index), propsCell);
|
|
202
|
+
}
|
|
203
|
+
} catch (err) {
|
|
204
|
+
_iterator.e(err);
|
|
205
|
+
} finally {
|
|
206
|
+
_iterator.f();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return _ref2 = sstyled(styles), /*#__PURE__*/React.createElement(SCell, _ref2.cn("SCell", _objectSpread(_objectSpread({
|
|
139
210
|
"key": cell.name
|
|
140
211
|
}, props), {}, {
|
|
141
212
|
"fixed": cell.fixed,
|
|
142
213
|
"theme": props.theme,
|
|
143
214
|
"use": use
|
|
144
|
-
})))
|
|
215
|
+
})));
|
|
145
216
|
}
|
|
146
|
-
|
|
147
|
-
return acc;
|
|
148
217
|
}, []);
|
|
149
218
|
}
|
|
219
|
+
}, {
|
|
220
|
+
key: "renderRow",
|
|
221
|
+
value: function renderRow(cells, _ref6) {
|
|
222
|
+
var _ref3;
|
|
223
|
+
|
|
224
|
+
var dataIndex = _ref6.dataIndex,
|
|
225
|
+
topOffset = _ref6.topOffset,
|
|
226
|
+
nested = _ref6.nested;
|
|
227
|
+
var SRow = Box;
|
|
228
|
+
var _this$asProps2 = this.asProps,
|
|
229
|
+
styles = _this$asProps2.styles,
|
|
230
|
+
rowPropsLayers = _this$asProps2.rowPropsLayers,
|
|
231
|
+
uniqueKey = _this$asProps2.uniqueKey,
|
|
232
|
+
virtualScroll = _this$asProps2.virtualScroll;
|
|
233
|
+
var rowHeightFromProps = _typeof(virtualScroll) === 'object' && virtualScroll?.rowHeight;
|
|
234
|
+
var rowData = cells.flatRowData || getCellsByColumn(cells);
|
|
235
|
+
var key = rowData[uniqueKey] ? String(rowData[uniqueKey]) : "row_".concat(dataIndex);
|
|
236
|
+
var needToMeasureHeight = dataIndex === 0 && !nested && !rowHeightFromProps;
|
|
237
|
+
var props = {
|
|
238
|
+
children: this.renderCells(cells, rowData, dataIndex),
|
|
239
|
+
theme: undefined,
|
|
240
|
+
active: undefined,
|
|
241
|
+
positioned: topOffset !== undefined,
|
|
242
|
+
top: topOffset,
|
|
243
|
+
ref: needToMeasureHeight ? this.firstRowRef : undefined,
|
|
244
|
+
key: key
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
var _iterator2 = _createForOfIteratorHelper(rowPropsLayers),
|
|
248
|
+
_step2;
|
|
249
|
+
|
|
250
|
+
try {
|
|
251
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
252
|
+
var rowPropsLayer = _step2.value;
|
|
253
|
+
|
|
254
|
+
var _rowPropsLayer$childr = rowPropsLayer.childrenPropsGetter,
|
|
255
|
+
childrenPropsGetter = _rowPropsLayer$childr === void 0 ? function (p) {
|
|
256
|
+
return p;
|
|
257
|
+
} : _rowPropsLayer$childr,
|
|
258
|
+
other = _objectWithoutProperties(rowPropsLayer, _excluded2);
|
|
259
|
+
|
|
260
|
+
var propsRow = assignProps(other, props);
|
|
261
|
+
props = assignProps(childrenPropsGetter(propsRow, rowData, dataIndex), propsRow);
|
|
262
|
+
}
|
|
263
|
+
} catch (err) {
|
|
264
|
+
_iterator2.e(err);
|
|
265
|
+
} finally {
|
|
266
|
+
_iterator2.f();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
return _ref3 = sstyled(styles), /*#__PURE__*/React.createElement(SRow, _ref3.cn("SRow", _objectSpread({}, props)));
|
|
270
|
+
}
|
|
271
|
+
}, {
|
|
272
|
+
key: "renderRows",
|
|
273
|
+
value: function renderRows(rows) {
|
|
274
|
+
var _this3 = this;
|
|
275
|
+
|
|
276
|
+
return rows.map(function (cells, dataIndex) {
|
|
277
|
+
return _this3.renderRow(cells, {
|
|
278
|
+
dataIndex: dataIndex,
|
|
279
|
+
nested: false
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}, {
|
|
284
|
+
key: "renderVirtualizedRows",
|
|
285
|
+
value: function renderVirtualizedRows(rows) {
|
|
286
|
+
var _this4 = this;
|
|
287
|
+
|
|
288
|
+
if (rows.length === 0) return [];
|
|
289
|
+
var virtualScroll = this.asProps.virtualScroll;
|
|
290
|
+
var _this$state = this.state,
|
|
291
|
+
scrollOffset = _this$state.scrollOffset,
|
|
292
|
+
scrollAreaHeight = _this$state.scrollAreaHeight;
|
|
293
|
+
var rowHeight = this.getRowHeight();
|
|
294
|
+
var tollerance = (_typeof(virtualScroll) === 'object' ? virtualScroll?.tollerance : 2) ?? 2;
|
|
295
|
+
var startIndex = Math.max(Math.floor(scrollOffset / rowHeight) - tollerance, 0);
|
|
296
|
+
var lastIndex = Math.min(Math.ceil((scrollOffset + scrollAreaHeight) / rowHeight) + tollerance, rows.length);
|
|
297
|
+
var rowHeightFromProps = _typeof(virtualScroll) === 'object' && virtualScroll?.rowHeight;
|
|
298
|
+
var needToMeasureFirstRowHeight = !rowHeightFromProps;
|
|
299
|
+
var firstRow = {
|
|
300
|
+
cells: rows[0],
|
|
301
|
+
dataIndex: 0,
|
|
302
|
+
topOffset: 0
|
|
303
|
+
};
|
|
304
|
+
var visibleRows = rowHeight !== undefined ? rows.slice(startIndex, lastIndex) : [];
|
|
305
|
+
var processedVisibleRows = visibleRows.map(function (cells, index) {
|
|
306
|
+
return {
|
|
307
|
+
cells: cells,
|
|
308
|
+
dataIndex: startIndex + index,
|
|
309
|
+
topOffset: rowHeight * (startIndex + index)
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
if (needToMeasureFirstRowHeight && startIndex !== 0) {
|
|
314
|
+
processedVisibleRows.unshift(firstRow);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return processedVisibleRows.map(function (_ref7) {
|
|
318
|
+
var cells = _ref7.cells,
|
|
319
|
+
dataIndex = _ref7.dataIndex,
|
|
320
|
+
topOffset = _ref7.topOffset;
|
|
321
|
+
return _this4.renderRow(cells, {
|
|
322
|
+
dataIndex: dataIndex,
|
|
323
|
+
topOffset: topOffset,
|
|
324
|
+
nested: false
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
}, {
|
|
329
|
+
key: "componentWillUnmount",
|
|
330
|
+
value: function componentWillUnmount() {
|
|
331
|
+
this.firstRowResizeObserver?.disconnect();
|
|
332
|
+
}
|
|
150
333
|
}, {
|
|
151
334
|
key: "render",
|
|
152
335
|
value: function render() {
|
|
153
336
|
var _ref = this.asProps,
|
|
154
|
-
_ref4
|
|
337
|
+
_ref4,
|
|
338
|
+
_this5 = this;
|
|
155
339
|
|
|
156
340
|
var SBody = Box;
|
|
157
341
|
var SBodyWrapper = Box;
|
|
158
342
|
var SScrollAreaBar = ScrollArea.Bar;
|
|
343
|
+
var SHeightHold = Box;
|
|
159
344
|
var _this$asProps3 = this.asProps,
|
|
160
345
|
Children = _this$asProps3.Children,
|
|
161
346
|
styles = _this$asProps3.styles,
|
|
162
347
|
rows = _this$asProps3.rows,
|
|
163
348
|
columns = _this$asProps3.columns,
|
|
164
349
|
$scrollRef = _this$asProps3.$scrollRef,
|
|
350
|
+
virtualScroll = _this$asProps3.virtualScroll,
|
|
165
351
|
onResize = _this$asProps3.onResize;
|
|
352
|
+
var columnsInitialized = columns.reduce(function (sum, _ref8) {
|
|
353
|
+
var width = _ref8.width;
|
|
354
|
+
return sum + width;
|
|
355
|
+
}, 0) > 0 || testEnv;
|
|
166
356
|
|
|
167
357
|
var _getScrollOffsetValue = getScrollOffsetValue(columns),
|
|
168
358
|
_getScrollOffsetValue2 = _slicedToArray(_getScrollOffsetValue, 2),
|
|
@@ -170,19 +360,28 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
170
360
|
offsetRightSum = _getScrollOffsetValue2[1];
|
|
171
361
|
|
|
172
362
|
var offsetSum = offsetLeftSum + offsetRightSum;
|
|
173
|
-
var
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
363
|
+
var rowHeight = this.getRowHeight();
|
|
364
|
+
var holdHeight = rowHeight !== undefined && virtualScroll ? rowHeight * rows.length : undefined;
|
|
365
|
+
|
|
366
|
+
if (virtualScroll && columnsInitialized && !rowHeight) {
|
|
367
|
+
new Promise(function () {
|
|
368
|
+
return _this5.setupRowSizeObserver();
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
|
|
177
372
|
return _ref4 = sstyled(styles), /*#__PURE__*/React.createElement(SBodyWrapper, _ref4.cn("SBodyWrapper", {}), /*#__PURE__*/React.createElement(ScrollArea, _ref4.cn("ScrollArea", {
|
|
178
373
|
"shadow": true,
|
|
179
374
|
"styles": scrollStyles,
|
|
180
375
|
"use:left": "".concat(offsetLeftSum, "px"),
|
|
181
376
|
"use:right": "".concat(offsetRightSum, "px"),
|
|
182
|
-
"onResize": onResize
|
|
377
|
+
"onResize": callAllEventHandlers(onResize, this.handleScrollAreaResize),
|
|
378
|
+
"onScroll": this.handleScrollAreaScroll
|
|
183
379
|
}), /*#__PURE__*/React.createElement(ScrollArea.Container, {
|
|
184
380
|
ref: $scrollRef
|
|
185
|
-
}, /*#__PURE__*/React.createElement(SBody, _ref4.cn("SBody", _objectSpread({}, _assignProps({}, _ref))),
|
|
381
|
+
}, /*#__PURE__*/React.createElement(SBody, _ref4.cn("SBody", _objectSpread({}, _assignProps({}, _ref))), holdHeight && /*#__PURE__*/React.createElement(SHeightHold, _ref4.cn("SHeightHold", {
|
|
382
|
+
"hMin": holdHeight,
|
|
383
|
+
"aria-hidden": true
|
|
384
|
+
})), columnsInitialized && !virtualScroll ? this.renderRows(rows) : null, columnsInitialized && virtualScroll ? this.renderVirtualizedRows(rows) : null)), /*#__PURE__*/React.createElement(SScrollAreaBar, _ref4.cn("SScrollAreaBar", {
|
|
186
385
|
"orientation": "horizontal",
|
|
187
386
|
"left": "".concat(offsetLeftSum, "px"),
|
|
188
387
|
"right": "".concat(offsetRightSum, "px"),
|
package/lib/es6/Body.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Body.jsx"],"names":["React","Component","sstyled","Root","Box","Flex","ScrollArea","getFixedStyle","getScrollOffsetValue","assignProps","testEnv","process","env","NODE_ENV","getCellsByColumn","row","reduce","acc","cell","name","Array","isArray","concat","data","Body","rows","SRow","asProps","styles","$propsRow","map","index","cellsByColumn","_row","props","getRowProps","p","other","propsRow","children","renderCells","theme","active","SCell","columns","use","renderRows","column","find","c","value","vars","cssVar","n","rendersCell","getCellProps","propsCell","justifyContent","style","length","join","push","fixed","SBody","SBodyWrapper","SScrollAreaBar","Bar","Children","$scrollRef","onResize","offsetLeftSum","offsetRightSum","offsetSum","columnsInitialized","sum","width","scrollStyles","origin"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { Box, Flex } from '@semcore/flex-box';\nimport ScrollArea from '@semcore/scroll-area';\nimport { getFixedStyle, getScrollOffsetValue } from './utils';\nimport assignProps from '@semcore/utils/lib/assignProps';\n\nimport scrollStyles from './style/scroll-area.shadow.css';\n\nconst testEnv = process.env.NODE_ENV === 'test';\n\nfunction getCellsByColumn(row) {\n return row.reduce((acc, cell) => {\n acc[cell.name] = acc[cell.name]\n ? Array.isArray(acc[cell.name])\n ? acc[cell.name].concat(cell.data)\n : [acc[cell.name], cell.data]\n : cell.data;\n return acc;\n }, {});\n}\n\nclass Body extends Component {\n renderRows(rows) {\n const SRow = Box;\n const { styles, $propsRow } = this.asProps;\n\n return rows.map((row, index) => {\n const cellsByColumn = row._row || getCellsByColumn(row);\n const props = $propsRow.reduce(\n (acc, { getRowProps = (p) => p, ...other }) => {\n const propsRow = assignProps(other, acc);\n return assignProps(getRowProps(propsRow, cellsByColumn, index), propsRow);\n },\n {\n children: this.renderCells(row, cellsByColumn, index),\n },\n );\n return sstyled(styles)(\n <SRow key={index} theme={props.theme} active={props.active} {...props} />,\n );\n });\n }\n\n renderCells(row, cellsByColumn, index) {\n const SCell = Flex;\n const { styles, columns, use } = this.asProps;\n return row.reduce((acc, cell) => {\n if (Array.isArray(cell)) {\n acc = acc.concat(<div>{this.renderRows(cell)}</div>);\n } else {\n const column = columns.find((c) => c.name === cell.name);\n const [name, value] = getFixedStyle(cell, columns);\n const vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(\n (n) => `var(${n})`,\n );\n const props = (cell.rendersCell || []).reduce(\n (acc, { getCellProps = (p) => p, ...other }) => {\n const propsCell = assignProps(other, acc);\n return assignProps(getCellProps(propsCell, cellsByColumn, index), propsCell);\n },\n {\n name: cell.name,\n children: cell.data,\n justifyContent: column?.props?.justifyContent,\n style: {\n [name]: value,\n width: vars.length === 1 ? vars[0] : `calc(${vars.join(' + ')})`,\n },\n },\n );\n\n acc.push(\n sstyled(styles)(\n <SCell key={cell.name} {...props} fixed={cell.fixed} theme={props.theme} use={use} />,\n ),\n );\n }\n return acc;\n }, []);\n }\n\n render() {\n const SBody = Root;\n const SBodyWrapper = Box;\n const SScrollAreaBar = ScrollArea.Bar;\n const { Children, styles, rows, columns, $scrollRef, onResize } = this.asProps;\n\n const [offsetLeftSum, offsetRightSum] = getScrollOffsetValue(columns);\n const offsetSum = offsetLeftSum + offsetRightSum;\n const columnsInitialized = columns.reduce((sum, { width }) => sum + width, 0) > 0 || testEnv;\n\n return sstyled(styles)(\n <SBodyWrapper>\n <ScrollArea\n shadow\n styles={scrollStyles}\n use:left={`${offsetLeftSum}px`}\n use:right={`${offsetRightSum}px`}\n onResize={onResize}\n >\n <ScrollArea.Container ref={$scrollRef}>\n <SBody render={Box}>{columnsInitialized ? this.renderRows(rows) : null}</SBody>\n </ScrollArea.Container>\n <SScrollAreaBar\n orientation=\"horizontal\"\n left={`${offsetLeftSum}px`}\n right={`${offsetRightSum}px`}\n offsetSum={`${offsetSum}px`}\n />\n <SScrollAreaBar orientation=\"vertical\" />\n </ScrollArea>\n {Children.origin}\n </SBodyWrapper>,\n );\n }\n}\n\nexport default Body;\n"],"file":"Body.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/Body.tsx"],"names":["React","Component","sstyled","Root","Box","Flex","ScrollArea","getFixedStyle","getScrollOffsetValue","assignProps","callAllEventHandlers","ResizeObserver","trottle","testEnv","process","env","NODE_ENV","getCellsByColumn","cells","flattenCells","flat","Object","fromEntries","map","cell","name","data","Body","rowHeight","undefined","scrollAreaHeight","scrollOffset","createRef","virtualScroll","asProps","rowHeightFromProps","state","entries","contentRect","height","setState","oldState","event","target","scrollTop","firstRowRef","current","firstRowResizeObserver","handleFirstRowResize","observe","rowData","index","SCell","styles","columns","use","Array","isArray","renderRows","column","find","c","value","vars","cssVar","props","children","justifyContent","style","width","length","join","cellPropsLayers","cellPropLayer","childrenPropsGetter","p","other","propsCell","fixed","theme","dataIndex","topOffset","nested","SRow","rowPropsLayers","uniqueKey","flatRowData","key","String","needToMeasureHeight","renderCells","active","positioned","top","ref","rowPropsLayer","propsRow","rows","renderRow","getRowHeight","tollerance","startIndex","Math","max","floor","lastIndex","min","ceil","needToMeasureFirstRowHeight","firstRow","visibleRows","slice","processedVisibleRows","unshift","disconnect","SBody","SBodyWrapper","SScrollAreaBar","Bar","SHeightHold","Children","$scrollRef","onResize","columnsInitialized","reduce","sum","offsetLeftSum","offsetRightSum","offsetSum","holdHeight","Promise","setupRowSizeObserver","scrollStyles","handleScrollAreaResize","handleScrollAreaScroll","renderVirtualizedRows","origin"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Component, sstyled, Root } from '@semcore/core';\nimport { Box, Flex, IBoxProps } from '@semcore/flex-box';\nimport ScrollArea from '@semcore/scroll-area';\nimport { getFixedStyle, getScrollOffsetValue } from './utils';\nimport { RowData, Column, NestedCells, PropsLayer, Cell } from './types';\nimport assignProps, { callAllEventHandlers } from '@semcore/utils/lib/assignProps';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport scrollStyles from './style/scroll-area.shadow.css';\nimport syncScroll from '@semcore/utils/lib/syncScroll';\nimport trottle from '@semcore/utils/lib/rafTrottle';\n\nconst testEnv = process.env.NODE_ENV === 'test';\n\nconst getCellsByColumn = (cells: NestedCells): RowData => {\n const flattenCells = cells.flat(20) as Cell[];\n return Object.fromEntries(flattenCells.map((cell) => [cell.name, cell.data]));\n};\n\ntype AsProps = {\n rows: NestedCells[];\n columns: Column[];\n $scrollRef: ReturnType<ReturnType<typeof syncScroll>>;\n onResize: ResizeObserverCallback;\n rowPropsLayers: PropsLayer[];\n use: 'primary' | 'secondary';\n uniqueKey: string;\n virtualScroll?: boolean | { tollerance?: number; rowHeight?: number };\n};\n\ntype State = {\n rowHeight: number | undefined;\n scrollAreaHeight: undefined | number;\n scrollOffset: number;\n};\n\nclass Body extends Component<AsProps, State> {\n state: State = {\n rowHeight: undefined,\n scrollAreaHeight: undefined,\n scrollOffset: 0,\n };\n\n firstRowRef = React.createRef<HTMLElement>();\n firstRowResizeObserver: ResizeObserver | null = null;\n\n getRowHeight = () => {\n const { virtualScroll } = this.asProps;\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n return rowHeightFromProps || this.state.rowHeight;\n };\n\n renderCells(cells: NestedCells, rowData: RowData, index: number) {\n const SCell = Flex;\n const { styles, columns, use } = this.asProps;\n return cells.map((cell) => {\n if (Array.isArray(cell)) {\n return <div>{this.renderRows(cell as NestedCells[])}</div>;\n } else {\n const column = columns.find((c) => c.name === cell.name);\n const [name, value] = getFixedStyle(cell, columns);\n const vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(\n (name) => `var(${name})`,\n );\n type CellProps = IBoxProps & {\n name: string;\n children: React.ReactNode;\n style: React.CSSProperties;\n };\n\n let props: CellProps = {\n name: cell.name,\n children: <>{cell.data}</>,\n justifyContent: column?.props?.justifyContent,\n style: {\n width: vars.length === 1 ? vars[0] : `calc(${vars.join(' + ')})`,\n },\n };\n if (name !== undefined && value !== undefined) {\n props.style[name] = value;\n }\n\n for (const cellPropLayer of cell.cellPropsLayers || []) {\n const { childrenPropsGetter = (p) => p, ...other } = cellPropLayer;\n const propsCell = assignProps(other, props);\n props = assignProps(childrenPropsGetter(propsCell, rowData, index), propsCell);\n }\n\n return sstyled(styles)(\n <SCell key={cell.name} {...props} fixed={cell.fixed} theme={props.theme} use={use} />,\n ) as React.ReactElement;\n }\n }, [] as React.ReactElement[]);\n }\n\n renderRow(\n cells: NestedCells,\n { dataIndex, topOffset, nested }: { dataIndex: number; topOffset?: number; nested: boolean },\n ) {\n const SRow = Box;\n const { styles, rowPropsLayers, uniqueKey, virtualScroll } = this.asProps;\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n\n const rowData = cells.flatRowData || getCellsByColumn(cells);\n const key = rowData[uniqueKey] ? String(rowData[uniqueKey]) : `row_${dataIndex}`;\n const needToMeasureHeight = dataIndex === 0 && !nested && !rowHeightFromProps;\n\n let props = {\n children: this.renderCells(cells, rowData, dataIndex),\n theme: undefined,\n active: undefined,\n positioned: topOffset !== undefined,\n top: topOffset,\n ref: needToMeasureHeight ? this.firstRowRef : undefined,\n key,\n };\n\n for (const rowPropsLayer of rowPropsLayers) {\n const { childrenPropsGetter = (p) => p, ...other } = rowPropsLayer;\n const propsRow = assignProps(other, props);\n props = assignProps(childrenPropsGetter(propsRow, rowData, dataIndex), propsRow);\n }\n\n return sstyled(styles)(<SRow {...props} />);\n }\n\n renderRows(rows: NestedCells[]) {\n return rows.map((cells, dataIndex) => this.renderRow(cells, { dataIndex, nested: false }));\n }\n\n renderVirtualizedRows(rows: NestedCells[]) {\n if (rows.length === 0) return [];\n\n const { virtualScroll } = this.asProps;\n const { scrollOffset, scrollAreaHeight } = this.state;\n const rowHeight = this.getRowHeight();\n\n const tollerance = (typeof virtualScroll === 'object' ? virtualScroll?.tollerance : 2) ?? 2;\n const startIndex = Math.max(Math.floor(scrollOffset / rowHeight!) - tollerance, 0);\n const lastIndex = Math.min(\n Math.ceil((scrollOffset + scrollAreaHeight!) / rowHeight!) + tollerance,\n rows.length,\n );\n\n const rowHeightFromProps = typeof virtualScroll === 'object' && virtualScroll?.rowHeight;\n const needToMeasureFirstRowHeight = !rowHeightFromProps;\n\n const firstRow = { cells: rows[0], dataIndex: 0, topOffset: 0 };\n const visibleRows = rowHeight !== undefined ? rows.slice(startIndex, lastIndex) : [];\n const processedVisibleRows = visibleRows.map((cells, index) => ({\n cells,\n dataIndex: startIndex + index,\n topOffset: rowHeight! * (startIndex + index),\n }));\n if (needToMeasureFirstRowHeight && startIndex !== 0) {\n processedVisibleRows.unshift(firstRow);\n }\n\n return processedVisibleRows.map(({ cells, dataIndex, topOffset }) =>\n this.renderRow(cells, { dataIndex, topOffset, nested: false }),\n );\n }\n\n handleFirstRowResize = trottle((entries: ResizeObserverEntry[]) => {\n const { contentRect } = entries[0];\n const { height } = contentRect;\n this.setState((oldState: State) => {\n if (oldState.rowHeight === height) return oldState;\n return { rowHeight: height };\n });\n });\n\n handleScrollAreaResize = trottle((entries: ResizeObserverEntry[]) => {\n const { virtualScroll } = this.asProps;\n if (!virtualScroll) return;\n const { contentRect } = entries[0];\n const { height } = contentRect;\n this.setState((oldState: State) => {\n if (oldState.scrollAreaHeight === height) return oldState;\n return { scrollAreaHeight: height };\n });\n });\n\n handleScrollAreaScroll = (event: React.SyntheticEvent<HTMLElement>) => {\n const { scrollTop } = event.target as HTMLElement;\n const { virtualScroll } = this.asProps;\n if (virtualScroll) {\n this.setState((oldState: State) => {\n if (oldState.scrollOffset === scrollTop) return oldState;\n return { scrollOffset: scrollTop };\n });\n }\n };\n\n setupRowSizeObserver = () => {\n if (!this.firstRowRef.current) return;\n if (!this.asProps.virtualScroll) return;\n this.firstRowResizeObserver = new ResizeObserver(this.handleFirstRowResize);\n this.firstRowResizeObserver.observe(this.firstRowRef.current);\n };\n\n componentWillUnmount() {\n this.firstRowResizeObserver?.disconnect();\n }\n\n render() {\n const SBody = Root;\n const SBodyWrapper = Box;\n const SScrollAreaBar = ScrollArea.Bar;\n const SHeightHold = Box;\n const { Children, styles, rows, columns, $scrollRef, virtualScroll, onResize } = this.asProps;\n\n const columnsInitialized = columns.reduce((sum, { width }) => sum + width, 0) > 0 || testEnv;\n\n const [offsetLeftSum, offsetRightSum] = getScrollOffsetValue(columns);\n const offsetSum = offsetLeftSum + offsetRightSum;\n\n const rowHeight = this.getRowHeight();\n const holdHeight =\n rowHeight !== undefined && virtualScroll ? rowHeight * rows.length : undefined;\n\n if (virtualScroll && columnsInitialized && !rowHeight) {\n new Promise(() => this.setupRowSizeObserver());\n }\n\n return sstyled(styles)(\n <SBodyWrapper>\n <ScrollArea\n shadow\n styles={scrollStyles}\n use:left={`${offsetLeftSum}px`}\n use:right={`${offsetRightSum}px`}\n onResize={callAllEventHandlers(onResize, this.handleScrollAreaResize)}\n onScroll={this.handleScrollAreaScroll}\n >\n <ScrollArea.Container ref={$scrollRef}>\n <SBody render={Box}>\n {holdHeight && <SHeightHold hMin={holdHeight} aria-hidden={true} />}\n {columnsInitialized && !virtualScroll ? this.renderRows(rows) : null}\n {columnsInitialized && virtualScroll ? this.renderVirtualizedRows(rows) : null}\n </SBody>\n </ScrollArea.Container>\n <SScrollAreaBar\n orientation=\"horizontal\"\n left={`${offsetLeftSum}px`}\n right={`${offsetRightSum}px`}\n offsetSum={`${offsetSum}px`}\n />\n <SScrollAreaBar orientation=\"vertical\" />\n </ScrollArea>\n {Children.origin}\n </SBodyWrapper>,\n );\n }\n}\n\nexport default Body;\n"],"file":"Body.js"}
|