tabler-react-2 0.1.158-alpha.2 → 0.1.158-alpha.3
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/dist/table-v2/index.js +52 -22
- package/package.json +1 -1
package/dist/table-v2/index.js
CHANGED
|
@@ -52,7 +52,7 @@ var PageSizeSelect = exports.PageSizeSelect = function PageSizeSelect(_ref3) {
|
|
|
52
52
|
options = _ref3$options === void 0 ? [10, 25, 50, 100] : _ref3$options,
|
|
53
53
|
dense = _ref3.dense;
|
|
54
54
|
return /*#__PURE__*/_react["default"].createElement("select", {
|
|
55
|
-
className:
|
|
55
|
+
className: "form-select form-select-sm",
|
|
56
56
|
value: value,
|
|
57
57
|
onChange: function onChange(e) {
|
|
58
58
|
return _onChange(Number(e.target.value));
|
|
@@ -109,18 +109,29 @@ var isEmptyRender = function isEmptyRender(node) {
|
|
|
109
109
|
if (typeof node === "string" && node.trim() === "") return true;
|
|
110
110
|
return false;
|
|
111
111
|
};
|
|
112
|
-
var renderCellWithFallback = function renderCellWithFallback(cell) {
|
|
112
|
+
var renderCellWithFallback = function renderCellWithFallback(cell, fallbackText) {
|
|
113
113
|
var _cell$getValue;
|
|
114
114
|
var rendered = (0, _reactTable.flexRender)(cell.column.columnDef.cell, cell.getContext());
|
|
115
115
|
var finalNode = isEmptyRender(rendered) ? (_cell$getValue = cell.getValue) === null || _cell$getValue === void 0 ? void 0 : _cell$getValue.call(cell) : rendered;
|
|
116
116
|
if (finalNode === null || finalNode === undefined || typeof finalNode === "string" && finalNode.trim() === "") {
|
|
117
117
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
118
118
|
className: "text-muted"
|
|
119
|
-
},
|
|
119
|
+
}, fallbackText);
|
|
120
120
|
}
|
|
121
121
|
return finalNode;
|
|
122
122
|
};
|
|
123
123
|
|
|
124
|
+
/** Skeletons */
|
|
125
|
+
|
|
126
|
+
var SkeletonCSS = function SkeletonCSS() {
|
|
127
|
+
return /*#__PURE__*/_react["default"].createElement("style", null, "\n /* TableV2 skeletons */\n .tblv2-skel {\n display: inline-block;\n vertical-align: middle;\n border-radius: 9999px;\n background: linear-gradient(90deg, #e9ecef 25%, #f1f3f5 37%, #e9ecef 63%);\n background-size: 400% 100%;\n animation: tblv2-shimmer 1.2s ease-in-out infinite;\n }\n @keyframes tblv2-shimmer {\n 0% { background-position: 100% 0; }\n 100% { background-position: 0 0; }\n }\n ");
|
|
128
|
+
};
|
|
129
|
+
var skeletonWidthAt = function skeletonWidthAt(rowIdx, colIdx) {
|
|
130
|
+
// Cycle through some natural-looking widths
|
|
131
|
+
var widths = [48, 72, 96, 120, 64, 88, 140];
|
|
132
|
+
return widths[(rowIdx + colIdx) % widths.length];
|
|
133
|
+
};
|
|
134
|
+
|
|
124
135
|
/** Main table */
|
|
125
136
|
|
|
126
137
|
var TableV2 = exports.TableV2 = function TableV2(_ref5) {
|
|
@@ -178,8 +189,6 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
|
|
|
178
189
|
// IMPORTANT: provide a stable id (e.g., row => row.id) when paginating
|
|
179
190
|
autoResetRowSelection: false,
|
|
180
191
|
onSortingChange: onSortingChange,
|
|
181
|
-
// Note: renderFallbackValue triggers only when a renderer returns `undefined`.
|
|
182
|
-
// We still handle null/"" ourselves in renderCellWithFallback.
|
|
183
192
|
renderFallbackValue: /*#__PURE__*/_react["default"].createElement("span", {
|
|
184
193
|
className: "text-muted"
|
|
185
194
|
}, fallbackText)
|
|
@@ -222,10 +231,40 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
|
|
|
222
231
|
state: sortState || false
|
|
223
232
|
}));
|
|
224
233
|
};
|
|
234
|
+
var total = totalRows !== null && totalRows !== void 0 ? totalRows : 0;
|
|
235
|
+
var leafCols = table.getAllLeafColumns().length;
|
|
225
236
|
var content = (0, _react.useMemo)(function () {
|
|
237
|
+
if (loading) {
|
|
238
|
+
var rowCount = Math.max(1, size || data.length || 10);
|
|
239
|
+
var rowClass = [dense ? "align-middle" : ""].filter(Boolean).join(" ");
|
|
240
|
+
var cellClass = [dense ? "py-1" : ""].filter(Boolean).join(" ");
|
|
241
|
+
var pillHeight = dense ? 16 : 18;
|
|
242
|
+
return Array.from({
|
|
243
|
+
length: rowCount
|
|
244
|
+
}).map(function (_, r) {
|
|
245
|
+
return /*#__PURE__*/_react["default"].createElement("tr", {
|
|
246
|
+
key: "skel-".concat(r),
|
|
247
|
+
className: rowClass,
|
|
248
|
+
"aria-hidden": "true"
|
|
249
|
+
}, Array.from({
|
|
250
|
+
length: leafCols
|
|
251
|
+
}).map(function (__, c) {
|
|
252
|
+
return /*#__PURE__*/_react["default"].createElement("td", {
|
|
253
|
+
key: "skel-".concat(r, "-").concat(c),
|
|
254
|
+
className: cellClass
|
|
255
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
256
|
+
className: "tblv2-skel",
|
|
257
|
+
style: {
|
|
258
|
+
height: pillHeight,
|
|
259
|
+
width: skeletonWidthAt(r, c)
|
|
260
|
+
}
|
|
261
|
+
}));
|
|
262
|
+
}));
|
|
263
|
+
});
|
|
264
|
+
}
|
|
226
265
|
if (!loading && data.length === 0) {
|
|
227
266
|
return /*#__PURE__*/_react["default"].createElement("tr", null, /*#__PURE__*/_react["default"].createElement("td", {
|
|
228
|
-
colSpan:
|
|
267
|
+
colSpan: leafCols,
|
|
229
268
|
className: "text-center ".concat(dense ? "py-3 small" : "py-3", " text-muted")
|
|
230
269
|
}, typeof emptyState === "function" ? emptyState() : emptyState));
|
|
231
270
|
}
|
|
@@ -237,15 +276,14 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
|
|
|
237
276
|
return /*#__PURE__*/_react["default"].createElement("td", {
|
|
238
277
|
key: cell.id,
|
|
239
278
|
className: [cell.column.columnDef.className || "", dense ? "py-1" : ""].filter(Boolean).join(" ")
|
|
240
|
-
}, renderCellWithFallback(cell));
|
|
279
|
+
}, renderCellWithFallback(cell, fallbackText));
|
|
241
280
|
}));
|
|
242
281
|
});
|
|
243
282
|
// Depend on internal table state so selection/sorting changes trigger re-render
|
|
244
|
-
}, [
|
|
245
|
-
var total = totalRows !== null && totalRows !== void 0 ? totalRows : 0;
|
|
283
|
+
}, [loading, size, data, dense, table, rs, currentSorting, emptyState, leafCols, fallbackText]);
|
|
246
284
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
247
285
|
className: parentClassName
|
|
248
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
286
|
+
}, /*#__PURE__*/_react["default"].createElement(SkeletonCSS, null), /*#__PURE__*/_react["default"].createElement("div", {
|
|
249
287
|
className: "table-responsive ".concat(nowrap ? "table-nowrap" : "", " ").concat(className)
|
|
250
288
|
}, /*#__PURE__*/_react["default"].createElement("table", {
|
|
251
289
|
className: ["table table-vcenter", stickyHeader ? "sticky-top" : "", dense ? "table-sm" : "", tableClassName].filter(Boolean).join(" ")
|
|
@@ -257,17 +295,8 @@ var TableV2 = exports.TableV2 = function TableV2(_ref5) {
|
|
|
257
295
|
header: h
|
|
258
296
|
});
|
|
259
297
|
}));
|
|
260
|
-
})), /*#__PURE__*/_react["default"].createElement("tbody", null,
|
|
261
|
-
|
|
262
|
-
className: "text-center ".concat(dense ? "py-2" : "py-3")
|
|
263
|
-
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
264
|
-
className: "spinner-border spinner-border-sm me-2",
|
|
265
|
-
role: "status",
|
|
266
|
-
"aria-hidden": true
|
|
267
|
-
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
268
|
-
className: dense ? "small text-muted" : "text-muted"
|
|
269
|
-
}, "Loading\u2026"))), content))), showPagination && /*#__PURE__*/_react["default"].createElement("div", {
|
|
270
|
-
className: "d-flex justify-content-between align-items-center ".concat(dense ? "mt-1" : "mt-2", " ").concat(paginationClassName)
|
|
298
|
+
})), /*#__PURE__*/_react["default"].createElement("tbody", null, content))), showPagination && /*#__PURE__*/_react["default"].createElement("div", {
|
|
299
|
+
className: "d-flex justify-content-between align-items-center mx-2 ".concat(dense ? "my-1" : "my-2", " ").concat(paginationClassName)
|
|
271
300
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
272
301
|
className: "d-flex align-items-center ".concat(dense ? "gap-2" : "")
|
|
273
302
|
}, /*#__PURE__*/_react["default"].createElement(Pager, {
|
|
@@ -342,6 +371,7 @@ TableV2.propTypes = {
|
|
|
342
371
|
parentClassName: _propTypes["default"].string,
|
|
343
372
|
emptyState: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].func]),
|
|
344
373
|
loading: _propTypes["default"].bool,
|
|
374
|
+
// now shows skeleton pills per cell
|
|
345
375
|
showPagination: _propTypes["default"].bool,
|
|
346
376
|
pageSizeOptions: _propTypes["default"].arrayOf(_propTypes["default"].number),
|
|
347
377
|
dense: _propTypes["default"].bool
|
|
@@ -363,7 +393,7 @@ TableV2.propTypes = {
|
|
|
363
393
|
* rowSelection={rowSelection} // { [rowId]: true }
|
|
364
394
|
* onRowSelectionChange={setRowSelection}
|
|
365
395
|
* getRowId={(row) => row.id} // <<< stable id across pages
|
|
366
|
-
* loading={loading}
|
|
396
|
+
* loading={loading} // <<< skeletons instead of spinner row
|
|
367
397
|
* nowrap
|
|
368
398
|
* stickyHeader
|
|
369
399
|
* />
|