@semcore/data-table 2.1.0 → 2.2.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/CHANGELOG.md +18 -0
- package/lib/cjs/Body.js +240 -80
- package/lib/cjs/Body.js.map +1 -1
- package/lib/cjs/DataTable.js +52 -56
- package/lib/cjs/DataTable.js.map +1 -1
- package/lib/cjs/Head.js +2 -2
- package/lib/cjs/Head.js.map +1 -1
- package/lib/cjs/style/data-table.shadow.css +11 -0
- package/lib/cjs/types.js.map +1 -1
- package/lib/es6/Body.js +234 -76
- package/lib/es6/Body.js.map +1 -1
- package/lib/es6/DataTable.js +52 -56
- package/lib/es6/DataTable.js.map +1 -1
- package/lib/es6/Head.js +2 -2
- package/lib/es6/Head.js.map +1 -1
- package/lib/es6/style/data-table.shadow.css +11 -0
- package/lib/es6/types.js.map +1 -1
- package/package.json +3 -2
- package/src/Body.tsx +152 -31
- package/src/DataTable.tsx +17 -2
- package/src/style/data-table.shadow.css +11 -0
- package/src/types.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
+
## [2.2.2] - 2022-04-25
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Version patch update due to children dependencies update (`@semcore/spin-container` [5.0.5 ~> 5.1.0]).
|
|
10
|
+
|
|
11
|
+
## [2.2.1] - 2022-04-21
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Version patch update due to children dependencies update (`@semcore/scroll-area` [3.6.4 ~> 3.7.0]).
|
|
16
|
+
|
|
17
|
+
## [2.2.0] - 2022-04-14
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Virtual scroll support.
|
|
22
|
+
|
|
5
23
|
## [2.1.0] - 2022-04-07
|
|
6
24
|
|
|
7
25
|
### Changed
|
package/lib/cjs/Body.js
CHANGED
|
@@ -2,27 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
8
10
|
exports["default"] = void 0;
|
|
9
11
|
|
|
10
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
-
|
|
12
12
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
15
17
|
|
|
16
18
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
19
|
|
|
18
20
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
21
|
|
|
22
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
23
|
+
|
|
20
24
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
25
|
|
|
22
26
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
27
|
|
|
24
28
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
29
|
|
|
30
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
31
|
+
|
|
26
32
|
var _core = require("@semcore/core");
|
|
27
33
|
|
|
28
34
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -33,11 +39,19 @@ var _scrollArea = _interopRequireDefault(require("@semcore/scroll-area"));
|
|
|
33
39
|
|
|
34
40
|
var _utils = require("./utils");
|
|
35
41
|
|
|
36
|
-
var _assignProps2 =
|
|
42
|
+
var _assignProps2 = _interopRequireWildcard(require("@semcore/utils/lib/assignProps"));
|
|
43
|
+
|
|
44
|
+
var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
|
|
45
|
+
|
|
46
|
+
var _rafTrottle = _interopRequireDefault(require("@semcore/utils/lib/rafTrottle"));
|
|
37
47
|
|
|
38
48
|
var _excluded = ["childrenPropsGetter"],
|
|
39
49
|
_excluded2 = ["childrenPropsGetter"];
|
|
40
50
|
|
|
51
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
52
|
+
|
|
53
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
54
|
+
|
|
41
55
|
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; }
|
|
42
56
|
|
|
43
57
|
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) { (0, _defineProperty2["default"])(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; }
|
|
@@ -81,74 +95,90 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
81
95
|
var _super = _createSuper(Body);
|
|
82
96
|
|
|
83
97
|
function Body() {
|
|
84
|
-
|
|
85
|
-
return _super.apply(this, arguments);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
(0, _createClass2["default"])(Body, [{
|
|
89
|
-
key: "renderRow",
|
|
90
|
-
value: function renderRow(cells, index) {
|
|
91
|
-
var _ref2;
|
|
98
|
+
var _this;
|
|
92
99
|
|
|
93
|
-
|
|
94
|
-
var _this$asProps = this.asProps,
|
|
95
|
-
styles = _this$asProps.styles,
|
|
96
|
-
rowPropsLayers = _this$asProps.rowPropsLayers;
|
|
97
|
-
var cellsByColumn = cells.flatRowData || getCellsByColumn(cells);
|
|
98
|
-
var props = {
|
|
99
|
-
children: this.renderCells(cells, cellsByColumn, index),
|
|
100
|
-
theme: undefined,
|
|
101
|
-
active: undefined
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
var _iterator = _createForOfIteratorHelper(rowPropsLayers),
|
|
105
|
-
_step;
|
|
106
|
-
|
|
107
|
-
try {
|
|
108
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
109
|
-
var rowPropsLayer = _step.value;
|
|
110
|
-
var _rowPropsLayer$childr = rowPropsLayer.childrenPropsGetter,
|
|
111
|
-
childrenPropsGetter = _rowPropsLayer$childr === void 0 ? function (p) {
|
|
112
|
-
return p;
|
|
113
|
-
} : _rowPropsLayer$childr,
|
|
114
|
-
other = (0, _objectWithoutProperties2["default"])(rowPropsLayer, _excluded);
|
|
115
|
-
var propsRow = (0, _assignProps2["default"])(other, props);
|
|
116
|
-
props = (0, _assignProps2["default"])(childrenPropsGetter(propsRow, cellsByColumn, index), propsRow);
|
|
117
|
-
}
|
|
118
|
-
} catch (err) {
|
|
119
|
-
_iterator.e(err);
|
|
120
|
-
} finally {
|
|
121
|
-
_iterator.f();
|
|
122
|
-
}
|
|
100
|
+
(0, _classCallCheck2["default"])(this, Body);
|
|
123
101
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}, props)));
|
|
102
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
103
|
+
args[_key] = arguments[_key];
|
|
127
104
|
}
|
|
128
|
-
}, {
|
|
129
|
-
key: "renderRows",
|
|
130
|
-
value: function renderRows(rows) {
|
|
131
|
-
var _this = this;
|
|
132
105
|
|
|
133
|
-
|
|
134
|
-
|
|
106
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
107
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
|
|
108
|
+
rowHeight: undefined,
|
|
109
|
+
scrollAreaHeight: undefined,
|
|
110
|
+
scrollOffset: 0
|
|
111
|
+
});
|
|
112
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "firstRowRef", _react["default"].createRef());
|
|
113
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "firstRowResizeObserver", null);
|
|
114
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getRowHeight", function () {
|
|
115
|
+
var virtualScroll = _this.asProps.virtualScroll;
|
|
116
|
+
var rowHeightFromProps = (0, _typeof2["default"])(virtualScroll) === 'object' && virtualScroll?.rowHeight;
|
|
117
|
+
return rowHeightFromProps || _this.state.rowHeight;
|
|
118
|
+
});
|
|
119
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleFirstRowResize", (0, _rafTrottle["default"])(function (entries) {
|
|
120
|
+
var contentRect = entries[0].contentRect;
|
|
121
|
+
var height = contentRect.height;
|
|
122
|
+
|
|
123
|
+
_this.setState(function (oldState) {
|
|
124
|
+
if (oldState.rowHeight === height) return oldState;
|
|
125
|
+
return {
|
|
126
|
+
rowHeight: height
|
|
127
|
+
};
|
|
135
128
|
});
|
|
136
|
-
}
|
|
137
|
-
|
|
129
|
+
}));
|
|
130
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleScrollAreaResize", (0, _rafTrottle["default"])(function (entries) {
|
|
131
|
+
var virtualScroll = _this.asProps.virtualScroll;
|
|
132
|
+
if (!virtualScroll) return;
|
|
133
|
+
var contentRect = entries[0].contentRect;
|
|
134
|
+
var height = contentRect.height;
|
|
135
|
+
|
|
136
|
+
_this.setState(function (oldState) {
|
|
137
|
+
if (oldState.scrollAreaHeight === height) return oldState;
|
|
138
|
+
return {
|
|
139
|
+
scrollAreaHeight: height
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
}));
|
|
143
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleScrollAreaScroll", function (event) {
|
|
144
|
+
var _ref5 = event.target,
|
|
145
|
+
scrollTop = _ref5.scrollTop;
|
|
146
|
+
var virtualScroll = _this.asProps.virtualScroll;
|
|
147
|
+
|
|
148
|
+
if (virtualScroll) {
|
|
149
|
+
_this.setState(function (oldState) {
|
|
150
|
+
if (oldState.scrollOffset === scrollTop) return oldState;
|
|
151
|
+
return {
|
|
152
|
+
scrollOffset: scrollTop
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setupRowSizeObserver", function () {
|
|
158
|
+
if (!_this.firstRowRef.current) return;
|
|
159
|
+
if (!_this.asProps.virtualScroll) return;
|
|
160
|
+
_this.firstRowResizeObserver = new _resizeObserverPolyfill["default"](_this.handleFirstRowResize);
|
|
161
|
+
|
|
162
|
+
_this.firstRowResizeObserver.observe(_this.firstRowRef.current);
|
|
163
|
+
});
|
|
164
|
+
return _this;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
(0, _createClass2["default"])(Body, [{
|
|
138
168
|
key: "renderCells",
|
|
139
|
-
value: function renderCells(cells,
|
|
169
|
+
value: function renderCells(cells, rowData, index) {
|
|
140
170
|
var _this2 = this;
|
|
141
171
|
|
|
142
172
|
var SCell = _flexBox.Flex;
|
|
143
|
-
var _this$
|
|
144
|
-
styles = _this$
|
|
145
|
-
columns = _this$
|
|
146
|
-
use = _this$
|
|
173
|
+
var _this$asProps = this.asProps,
|
|
174
|
+
styles = _this$asProps.styles,
|
|
175
|
+
columns = _this$asProps.columns,
|
|
176
|
+
use = _this$asProps.use;
|
|
147
177
|
return cells.map(function (cell) {
|
|
148
178
|
if (Array.isArray(cell)) {
|
|
149
179
|
return /*#__PURE__*/_react["default"].createElement("div", null, _this2.renderRows(cell));
|
|
150
180
|
} else {
|
|
151
|
-
var
|
|
181
|
+
var _ref2;
|
|
152
182
|
|
|
153
183
|
var column = columns.find(function (c) {
|
|
154
184
|
return c.name === cell.name;
|
|
@@ -162,38 +192,40 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
162
192
|
var vars = (Array.isArray(cell.cssVar) ? cell.cssVar : [cell.cssVar]).map(function (name) {
|
|
163
193
|
return "var(".concat(name, ")");
|
|
164
194
|
});
|
|
165
|
-
var props =
|
|
195
|
+
var props = {
|
|
166
196
|
name: cell.name,
|
|
167
|
-
children: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, cell.data)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
197
|
+
children: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, cell.data),
|
|
198
|
+
justifyContent: column?.props?.justifyContent,
|
|
199
|
+
style: {
|
|
200
|
+
width: vars.length === 1 ? vars[0] : "calc(".concat(vars.join(' + '), ")")
|
|
201
|
+
}
|
|
202
|
+
};
|
|
171
203
|
|
|
172
204
|
if (name !== undefined && value !== undefined) {
|
|
173
205
|
props.style[name] = value;
|
|
174
206
|
}
|
|
175
207
|
|
|
176
|
-
var
|
|
177
|
-
|
|
208
|
+
var _iterator = _createForOfIteratorHelper(cell.cellPropsLayers || []),
|
|
209
|
+
_step;
|
|
178
210
|
|
|
179
211
|
try {
|
|
180
|
-
for (
|
|
181
|
-
var cellPropLayer =
|
|
212
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
213
|
+
var cellPropLayer = _step.value;
|
|
182
214
|
var _cellPropLayer$childr = cellPropLayer.childrenPropsGetter,
|
|
183
215
|
childrenPropsGetter = _cellPropLayer$childr === void 0 ? function (p) {
|
|
184
216
|
return p;
|
|
185
217
|
} : _cellPropLayer$childr,
|
|
186
|
-
other = (0, _objectWithoutProperties2["default"])(cellPropLayer,
|
|
218
|
+
other = (0, _objectWithoutProperties2["default"])(cellPropLayer, _excluded);
|
|
187
219
|
var propsCell = (0, _assignProps2["default"])(other, props);
|
|
188
|
-
props = (0, _assignProps2["default"])(childrenPropsGetter(propsCell,
|
|
220
|
+
props = (0, _assignProps2["default"])(childrenPropsGetter(propsCell, rowData, index), propsCell);
|
|
189
221
|
}
|
|
190
222
|
} catch (err) {
|
|
191
|
-
|
|
223
|
+
_iterator.e(err);
|
|
192
224
|
} finally {
|
|
193
|
-
|
|
225
|
+
_iterator.f();
|
|
194
226
|
}
|
|
195
227
|
|
|
196
|
-
return
|
|
228
|
+
return _ref2 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SCell, _ref2.cn("SCell", _objectSpread(_objectSpread({
|
|
197
229
|
"key": cell.name
|
|
198
230
|
}, props), {}, {
|
|
199
231
|
"fixed": cell.fixed,
|
|
@@ -203,24 +235,139 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
203
235
|
}
|
|
204
236
|
}, []);
|
|
205
237
|
}
|
|
238
|
+
}, {
|
|
239
|
+
key: "renderRow",
|
|
240
|
+
value: function renderRow(cells, _ref6) {
|
|
241
|
+
var _ref3;
|
|
242
|
+
|
|
243
|
+
var dataIndex = _ref6.dataIndex,
|
|
244
|
+
topOffset = _ref6.topOffset,
|
|
245
|
+
nested = _ref6.nested;
|
|
246
|
+
var SRow = _flexBox.Box;
|
|
247
|
+
var _this$asProps2 = this.asProps,
|
|
248
|
+
styles = _this$asProps2.styles,
|
|
249
|
+
rowPropsLayers = _this$asProps2.rowPropsLayers,
|
|
250
|
+
uniqueKey = _this$asProps2.uniqueKey,
|
|
251
|
+
virtualScroll = _this$asProps2.virtualScroll;
|
|
252
|
+
var rowHeightFromProps = (0, _typeof2["default"])(virtualScroll) === 'object' && virtualScroll?.rowHeight;
|
|
253
|
+
var rowData = cells.flatRowData || getCellsByColumn(cells);
|
|
254
|
+
var key = rowData[uniqueKey] ? String(rowData[uniqueKey]) : "row_".concat(dataIndex);
|
|
255
|
+
var needToMeasureHeight = dataIndex === 0 && !nested && !rowHeightFromProps;
|
|
256
|
+
var props = {
|
|
257
|
+
children: this.renderCells(cells, rowData, dataIndex),
|
|
258
|
+
theme: undefined,
|
|
259
|
+
active: undefined,
|
|
260
|
+
positioned: topOffset !== undefined,
|
|
261
|
+
top: topOffset,
|
|
262
|
+
ref: needToMeasureHeight ? this.firstRowRef : undefined,
|
|
263
|
+
key: key
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
var _iterator2 = _createForOfIteratorHelper(rowPropsLayers),
|
|
267
|
+
_step2;
|
|
268
|
+
|
|
269
|
+
try {
|
|
270
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
271
|
+
var rowPropsLayer = _step2.value;
|
|
272
|
+
var _rowPropsLayer$childr = rowPropsLayer.childrenPropsGetter,
|
|
273
|
+
childrenPropsGetter = _rowPropsLayer$childr === void 0 ? function (p) {
|
|
274
|
+
return p;
|
|
275
|
+
} : _rowPropsLayer$childr,
|
|
276
|
+
other = (0, _objectWithoutProperties2["default"])(rowPropsLayer, _excluded2);
|
|
277
|
+
var propsRow = (0, _assignProps2["default"])(other, props);
|
|
278
|
+
props = (0, _assignProps2["default"])(childrenPropsGetter(propsRow, rowData, dataIndex), propsRow);
|
|
279
|
+
}
|
|
280
|
+
} catch (err) {
|
|
281
|
+
_iterator2.e(err);
|
|
282
|
+
} finally {
|
|
283
|
+
_iterator2.f();
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return _ref3 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SRow, _ref3.cn("SRow", _objectSpread({}, props)));
|
|
287
|
+
}
|
|
288
|
+
}, {
|
|
289
|
+
key: "renderRows",
|
|
290
|
+
value: function renderRows(rows) {
|
|
291
|
+
var _this3 = this;
|
|
292
|
+
|
|
293
|
+
return rows.map(function (cells, dataIndex) {
|
|
294
|
+
return _this3.renderRow(cells, {
|
|
295
|
+
dataIndex: dataIndex,
|
|
296
|
+
nested: false
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
}, {
|
|
301
|
+
key: "renderVirtualizedRows",
|
|
302
|
+
value: function renderVirtualizedRows(rows) {
|
|
303
|
+
var _this4 = this;
|
|
304
|
+
|
|
305
|
+
if (rows.length === 0) return [];
|
|
306
|
+
var virtualScroll = this.asProps.virtualScroll;
|
|
307
|
+
var _this$state = this.state,
|
|
308
|
+
scrollOffset = _this$state.scrollOffset,
|
|
309
|
+
scrollAreaHeight = _this$state.scrollAreaHeight;
|
|
310
|
+
var rowHeight = this.getRowHeight();
|
|
311
|
+
var tollerance = ((0, _typeof2["default"])(virtualScroll) === 'object' ? virtualScroll?.tollerance : 2) ?? 2;
|
|
312
|
+
var startIndex = Math.max(Math.floor(scrollOffset / rowHeight) - tollerance, 0);
|
|
313
|
+
var lastIndex = Math.min(Math.ceil((scrollOffset + scrollAreaHeight) / rowHeight) + tollerance, rows.length);
|
|
314
|
+
var rowHeightFromProps = (0, _typeof2["default"])(virtualScroll) === 'object' && virtualScroll?.rowHeight;
|
|
315
|
+
var needToMeasureFirstRowHeight = !rowHeightFromProps;
|
|
316
|
+
var firstRow = {
|
|
317
|
+
cells: rows[0],
|
|
318
|
+
dataIndex: 0,
|
|
319
|
+
topOffset: 0
|
|
320
|
+
};
|
|
321
|
+
var visibleRows = rowHeight !== undefined ? rows.slice(startIndex, lastIndex) : [];
|
|
322
|
+
var processedVisibleRows = visibleRows.map(function (cells, index) {
|
|
323
|
+
return {
|
|
324
|
+
cells: cells,
|
|
325
|
+
dataIndex: startIndex + index,
|
|
326
|
+
topOffset: rowHeight * (startIndex + index)
|
|
327
|
+
};
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
if (needToMeasureFirstRowHeight && startIndex !== 0) {
|
|
331
|
+
processedVisibleRows.unshift(firstRow);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return processedVisibleRows.map(function (_ref7) {
|
|
335
|
+
var cells = _ref7.cells,
|
|
336
|
+
dataIndex = _ref7.dataIndex,
|
|
337
|
+
topOffset = _ref7.topOffset;
|
|
338
|
+
return _this4.renderRow(cells, {
|
|
339
|
+
dataIndex: dataIndex,
|
|
340
|
+
topOffset: topOffset,
|
|
341
|
+
nested: false
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
}, {
|
|
346
|
+
key: "componentWillUnmount",
|
|
347
|
+
value: function componentWillUnmount() {
|
|
348
|
+
this.firstRowResizeObserver?.disconnect();
|
|
349
|
+
}
|
|
206
350
|
}, {
|
|
207
351
|
key: "render",
|
|
208
352
|
value: function render() {
|
|
209
353
|
var _ref = this.asProps,
|
|
210
|
-
_ref4
|
|
354
|
+
_ref4,
|
|
355
|
+
_this5 = this;
|
|
211
356
|
|
|
212
357
|
var SBody = _flexBox.Box;
|
|
213
358
|
var SBodyWrapper = _flexBox.Box;
|
|
214
359
|
var SScrollAreaBar = _scrollArea["default"].Bar;
|
|
360
|
+
var SHeightHold = _flexBox.Box;
|
|
215
361
|
var _this$asProps3 = this.asProps,
|
|
216
362
|
Children = _this$asProps3.Children,
|
|
217
363
|
styles = _this$asProps3.styles,
|
|
218
364
|
rows = _this$asProps3.rows,
|
|
219
365
|
columns = _this$asProps3.columns,
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
366
|
+
$scrollRef = _this$asProps3.$scrollRef,
|
|
367
|
+
virtualScroll = _this$asProps3.virtualScroll,
|
|
368
|
+
onResize = _this$asProps3.onResize;
|
|
369
|
+
var columnsInitialized = columns.reduce(function (sum, _ref8) {
|
|
370
|
+
var width = _ref8.width;
|
|
224
371
|
return sum + width;
|
|
225
372
|
}, 0) > 0 || testEnv;
|
|
226
373
|
|
|
@@ -230,15 +377,28 @@ var Body = /*#__PURE__*/function (_Component) {
|
|
|
230
377
|
offsetRightSum = _getScrollOffsetValue2[1];
|
|
231
378
|
|
|
232
379
|
var offsetSum = offsetLeftSum + offsetRightSum;
|
|
380
|
+
var rowHeight = this.getRowHeight();
|
|
381
|
+
var holdHeight = rowHeight !== undefined && virtualScroll ? rowHeight * rows.length : undefined;
|
|
382
|
+
|
|
383
|
+
if (virtualScroll && columnsInitialized && !rowHeight) {
|
|
384
|
+
new Promise(function () {
|
|
385
|
+
return _this5.setupRowSizeObserver();
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
|
|
233
389
|
return _ref4 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SBodyWrapper, _ref4.cn("SBodyWrapper", {}), /*#__PURE__*/_react["default"].createElement(_scrollArea["default"], _ref4.cn("ScrollArea", {
|
|
234
390
|
"shadow": true,
|
|
235
391
|
"styles": scrollStyles,
|
|
236
392
|
"use:left": "".concat(offsetLeftSum, "px"),
|
|
237
393
|
"use:right": "".concat(offsetRightSum, "px"),
|
|
238
|
-
"onResize": onResize
|
|
394
|
+
"onResize": (0, _assignProps2.callAllEventHandlers)(onResize, this.handleScrollAreaResize),
|
|
395
|
+
"onScroll": this.handleScrollAreaScroll
|
|
239
396
|
}), /*#__PURE__*/_react["default"].createElement(_scrollArea["default"].Container, {
|
|
240
397
|
ref: $scrollRef
|
|
241
|
-
}, /*#__PURE__*/_react["default"].createElement(SBody, _ref4.cn("SBody", _objectSpread({}, (0, _core.assignProps)({}, _ref))),
|
|
398
|
+
}, /*#__PURE__*/_react["default"].createElement(SBody, _ref4.cn("SBody", _objectSpread({}, (0, _core.assignProps)({}, _ref))), holdHeight && /*#__PURE__*/_react["default"].createElement(SHeightHold, _ref4.cn("SHeightHold", {
|
|
399
|
+
"hMin": holdHeight,
|
|
400
|
+
"aria-hidden": true
|
|
401
|
+
})), columnsInitialized && !virtualScroll ? this.renderRows(rows) : null, columnsInitialized && virtualScroll ? this.renderVirtualizedRows(rows) : null)), /*#__PURE__*/_react["default"].createElement(SScrollAreaBar, _ref4.cn("SScrollAreaBar", {
|
|
242
402
|
"orientation": "horizontal",
|
|
243
403
|
"left": "".concat(offsetLeftSum, "px"),
|
|
244
404
|
"right": "".concat(offsetRightSum, "px"),
|
package/lib/cjs/Body.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Body.tsx"],"names":["testEnv","process","env","NODE_ENV","getCellsByColumn","cells","flattenCells","flat","Object","fromEntries","map","cell","name","data","Body","index","SRow","Box","asProps","styles","rowPropsLayers","cellsByColumn","flatRowData","props","children","renderCells","theme","undefined","active","rowPropsLayer","childrenPropsGetter","p","other","propsRow","rows","renderRow","SCell","Flex","columns","use","Array","isArray","renderRows","column","find","c","value","vars","cssVar","JSON","stringify","justifyContent","width","length","join","style","cellPropsLayers","cellPropLayer","propsCell","fixed","SBody","SBodyWrapper","SScrollAreaBar","ScrollArea","Bar","Children","onResize","$scrollRef","columnsInitialized","reduce","sum","offsetLeftSum","offsetRightSum","offsetSum","scrollStyles","origin","Component"],"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 from '@semcore/utils/lib/assignProps';\nimport type ResizeObserverCallback from 'resize-observer-polyfill';\n\nimport scrollStyles from './style/scroll-area.shadow.css';\nimport syncScroll from '@semcore/utils/lib/syncScroll';\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};\n\nclass Body extends Component<AsProps> {\n renderRow(cells: NestedCells, index: number) {\n const SRow = Box;\n const { styles, rowPropsLayers } = this.asProps;\n\n const cellsByColumn = cells.flatRowData || getCellsByColumn(cells);\n\n let props = {\n children: this.renderCells(cells, cellsByColumn, index),\n theme: undefined,\n active: undefined,\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, cellsByColumn, index), propsRow);\n }\n\n return sstyled(styles)(<SRow key={index} {...props} />);\n }\n\n renderRows(rows: NestedCells[]) {\n return rows.map((cells, index) => this.renderRow(cells, index));\n }\n\n renderCells(cells: NestedCells, cellsByColumn: 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 ['data-data']: JSON.stringify(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, cellsByColumn, 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 render() {\n const SBody = Root;\n const SBodyWrapper = Box;\n const SScrollAreaBar = ScrollArea.Bar;\n const { Children, styles, rows, columns, onResize, $scrollRef } = 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 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":["testEnv","process","env","NODE_ENV","getCellsByColumn","cells","flattenCells","flat","Object","fromEntries","map","cell","name","data","Body","rowHeight","undefined","scrollAreaHeight","scrollOffset","React","createRef","virtualScroll","asProps","rowHeightFromProps","state","entries","contentRect","height","setState","oldState","event","target","scrollTop","firstRowRef","current","firstRowResizeObserver","ResizeObserver","handleFirstRowResize","observe","rowData","index","SCell","Flex","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","Box","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","ScrollArea","Bar","SHeightHold","Children","$scrollRef","onResize","columnsInitialized","reduce","sum","offsetLeftSum","offsetRightSum","offsetSum","holdHeight","Promise","setupRowSizeObserver","scrollStyles","handleScrollAreaResize","handleScrollAreaScroll","renderVirtualizedRows","origin","Component"],"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"}
|