@pingux/astro 2.215.0-alpha.0 → 2.216.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/Table/Table.mdx +2 -3
- package/lib/cjs/components/TableBase/Convenience/TableBaseEmptyState.stories.js +73 -0
- package/lib/cjs/components/TableBase/Customization/CustomEmptyState.stories.js +62 -0
- package/lib/cjs/components/TableBase/TableBase.js +62 -19
- package/lib/cjs/components/TableBase/TableBase.stories.js +144 -26
- package/lib/cjs/components/TableBase/TableBase.test.js +95 -0
- package/lib/cjs/components/TableBase/TableBaseEmptyState.d.ts +4 -0
- package/lib/cjs/components/TableBase/TableBaseEmptyState.js +72 -0
- package/lib/cjs/components/TableBase/TableBaseEmptyState.test.js +54 -0
- package/lib/cjs/components/TableBase/index.d.ts +1 -0
- package/lib/cjs/components/TableBase/index.js +8 -1
- package/lib/cjs/components/TableBase/tableBaseAttributes.d.ts +20 -0
- package/lib/cjs/components/TableBase/tableBaseAttributes.js +21 -1
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.js +8 -0
- package/lib/cjs/types/tableBase.d.ts +10 -1
- package/lib/components/Table/Table.mdx +2 -3
- package/lib/components/TableBase/Convenience/TableBaseEmptyState.stories.js +65 -0
- package/lib/components/TableBase/Customization/CustomEmptyState.stories.js +54 -0
- package/lib/components/TableBase/TableBase.js +64 -19
- package/lib/components/TableBase/TableBase.stories.js +145 -26
- package/lib/components/TableBase/TableBase.test.js +95 -0
- package/lib/components/TableBase/TableBaseEmptyState.js +60 -0
- package/lib/components/TableBase/TableBaseEmptyState.test.js +51 -0
- package/lib/components/TableBase/index.js +2 -1
- package/lib/components/TableBase/tableBaseAttributes.js +20 -0
- package/lib/index.js +1 -0
- package/package.json +1 -1
|
@@ -5,10 +5,9 @@ import * as TableStories from './Table.stories';
|
|
|
5
5
|
|
|
6
6
|
# Table
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
They organize information in a way that’s easy to scan so that users can look for patterns and develop insights from data.
|
|
8
|
+
The `Table` component (along with `TableCaption`, `TableHead`, `TableBody`, etc.) is a drop-in replacement for HTML table elements. This means it lacks internal state and logic. **NOTE:** For most cases, it’s recommended to use `TableBase` instead.
|
|
10
9
|
|
|
11
|
-
Column header names describe the type of content displayed in each column.
|
|
10
|
+
Column header names describe the type of content displayed in each column.
|
|
12
11
|
Each row contains data related to a single entity.
|
|
13
12
|
|
|
14
13
|
Tables should:
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = exports.WithAddButton = exports.Default = exports.Customization = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
var _storybookDocsLayout = _interopRequireDefault(require("../../../../.storybook/storybookDocsLayout"));
|
|
12
|
+
var _index = require("../../../index");
|
|
13
|
+
var _react2 = require("@emotion/react");
|
|
14
|
+
var _default = exports["default"] = {
|
|
15
|
+
title: 'Components/TableBase/Convenience/TableBaseEmptyState',
|
|
16
|
+
component: _index.TableBaseEmptyState,
|
|
17
|
+
parameters: {
|
|
18
|
+
docs: {
|
|
19
|
+
page: function page() {
|
|
20
|
+
return (0, _react2.jsx)(_storybookDocsLayout["default"], null);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
argTypes: {
|
|
25
|
+
headerLabel: {
|
|
26
|
+
control: {
|
|
27
|
+
type: 'text'
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
descriptionLabel: {
|
|
31
|
+
control: {
|
|
32
|
+
type: 'text'
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
addButtonLabel: {
|
|
36
|
+
control: {
|
|
37
|
+
type: 'text'
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
defaultIcon: {
|
|
41
|
+
control: false
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
args: {
|
|
45
|
+
headerLabel: 'No items exist',
|
|
46
|
+
descriptionLabel: 'Take action by doing x, y, z'
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var Default = exports.Default = function Default(args) {
|
|
50
|
+
return (0, _react2.jsx)(_index.TableBaseEmptyState, args);
|
|
51
|
+
};
|
|
52
|
+
var WithAddButton = exports.WithAddButton = function WithAddButton(args) {
|
|
53
|
+
return (0, _react2.jsx)(_index.TableBaseEmptyState, (0, _extends2["default"])({}, args, {
|
|
54
|
+
addButtonLabel: "Add Item"
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
57
|
+
var Customization = exports.Customization = function Customization() {
|
|
58
|
+
return (0, _react2.jsx)(_index.Box, {
|
|
59
|
+
isRow: false,
|
|
60
|
+
gap: "xl"
|
|
61
|
+
}, (0, _react2.jsx)(_index.TableBaseEmptyState, {
|
|
62
|
+
headerLabel: "No users found",
|
|
63
|
+
descriptionLabel: "Add your first user to get started.",
|
|
64
|
+
addButtonLabel: "New User"
|
|
65
|
+
}), (0, _react2.jsx)(_index.TableBaseEmptyState, {
|
|
66
|
+
headerLabel: "No results",
|
|
67
|
+
descriptionLabel: "Try adjusting your search or filters."
|
|
68
|
+
}), (0, _react2.jsx)(_index.TableBaseEmptyState, {
|
|
69
|
+
headerLabel: "Nothing here yet",
|
|
70
|
+
descriptionLabel: "Create a new entry to see it listed here.",
|
|
71
|
+
addButtonLabel: "Create Entry"
|
|
72
|
+
}));
|
|
73
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = exports.CustomEmptyState = void 0;
|
|
9
|
+
var _storybookDocsLayout = _interopRequireDefault(require("../../../../.storybook/storybookDocsLayout"));
|
|
10
|
+
var _index = require("../../../index");
|
|
11
|
+
var _react = require("@emotion/react");
|
|
12
|
+
var _default = exports["default"] = {
|
|
13
|
+
title: 'Components/TableBase/Customization',
|
|
14
|
+
component: _index.TableBase,
|
|
15
|
+
parameters: {
|
|
16
|
+
docs: {
|
|
17
|
+
page: function page() {
|
|
18
|
+
return (0, _react.jsx)(_storybookDocsLayout["default"], null);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var headers = [{
|
|
24
|
+
key: 'name',
|
|
25
|
+
name: 'Name'
|
|
26
|
+
}, {
|
|
27
|
+
key: 'email',
|
|
28
|
+
name: 'Email'
|
|
29
|
+
}, {
|
|
30
|
+
key: 'status',
|
|
31
|
+
name: 'Status'
|
|
32
|
+
}];
|
|
33
|
+
var CustomEmptyState = exports.CustomEmptyState = function CustomEmptyState() {
|
|
34
|
+
return (0, _react.jsx)(_index.Card, {
|
|
35
|
+
variant: "cards.tableWrapper"
|
|
36
|
+
}, (0, _react.jsx)(_index.TableBase, {
|
|
37
|
+
caption: "Custom empty state",
|
|
38
|
+
"aria-label": "table with custom empty state",
|
|
39
|
+
renderEmptyState: function renderEmptyState() {
|
|
40
|
+
return (0, _react.jsx)(_index.TableBaseEmptyState, {
|
|
41
|
+
headerLabel: "No resources found",
|
|
42
|
+
descriptionLabel: "Try adjusting your search or filters.",
|
|
43
|
+
addButtonLabel: "Add Resource"
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}, (0, _react.jsx)(_index.THead, {
|
|
47
|
+
columns: headers
|
|
48
|
+
}, function (column) {
|
|
49
|
+
return (0, _react.jsx)(_index.Column, {
|
|
50
|
+
key: column.key,
|
|
51
|
+
minWidth: 200
|
|
52
|
+
}, column.name);
|
|
53
|
+
}), (0, _react.jsx)(_index.TBody, {
|
|
54
|
+
items: []
|
|
55
|
+
}, function () {
|
|
56
|
+
return (0, _react.jsx)(_index.Row, {
|
|
57
|
+
key: "unused"
|
|
58
|
+
}, function () {
|
|
59
|
+
return (0, _react.jsx)(_index.Cell, null, (0, _react.jsx)(_index.Text, null, "-"));
|
|
60
|
+
});
|
|
61
|
+
})));
|
|
62
|
+
};
|
|
@@ -15,13 +15,14 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
15
15
|
value: true
|
|
16
16
|
});
|
|
17
17
|
exports["default"] = void 0;
|
|
18
|
+
var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
|
|
18
19
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
|
|
19
20
|
var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
|
|
20
21
|
var _map2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
21
22
|
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
|
|
22
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
23
23
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
24
24
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
|
25
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
25
26
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
|
26
27
|
var _react = _interopRequireWildcard(require("react"));
|
|
27
28
|
var _focus = require("@react-aria/focus");
|
|
@@ -32,13 +33,59 @@ var _visuallyHidden = require("@react-aria/visually-hidden");
|
|
|
32
33
|
var _table2 = require("@react-stately/table");
|
|
33
34
|
var _ = require("../..");
|
|
34
35
|
var _hooks = require("../../hooks");
|
|
36
|
+
var _TableBaseEmptyState = _interopRequireDefault(require("./TableBaseEmptyState"));
|
|
35
37
|
var _react2 = require("@emotion/react");
|
|
36
|
-
var _excluded = ["
|
|
37
|
-
_excluded2 = ["caption"],
|
|
38
|
-
_excluded3 = ["
|
|
38
|
+
var _excluded = ["children", "items", "renderEmptyState", "loadingState"],
|
|
39
|
+
_excluded2 = ["caption", "selectionMode", "selectionBehavior", "hasSelectionCheckboxes", "isStickyHeader", "className", "isLastColumnSticky", "loadingState", "renderEmptyState", "onResizeStart", "onResize", "onResizeEnd", "onRowAction"],
|
|
40
|
+
_excluded3 = ["caption"],
|
|
41
|
+
_excluded4 = ["type", "children", "className", "isSticky"]; // Strips react-stately collection props that must not reach the DOM tbody element.
|
|
39
42
|
function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
40
43
|
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
41
44
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
45
|
+
var omitTableBodyProps = function omitTableBodyProps(_ref) {
|
|
46
|
+
var children = _ref.children,
|
|
47
|
+
items = _ref.items,
|
|
48
|
+
renderEmptyState = _ref.renderEmptyState,
|
|
49
|
+
loadingState = _ref.loadingState,
|
|
50
|
+
rest = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
51
|
+
return rest;
|
|
52
|
+
};
|
|
53
|
+
var LOADING_STATES = new _set["default"](['loading', 'sorting']);
|
|
54
|
+
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
var BoxCell = function BoxCell(props) {
|
|
57
|
+
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
|
58
|
+
as: "td",
|
|
59
|
+
display: "table-cell"
|
|
60
|
+
}, props));
|
|
61
|
+
};
|
|
62
|
+
function LoadingOrEmptyState(_ref2) {
|
|
63
|
+
var _renderEmptyState;
|
|
64
|
+
var loadingState = _ref2.loadingState,
|
|
65
|
+
collectionSize = _ref2.collectionSize,
|
|
66
|
+
colSpan = _ref2.colSpan,
|
|
67
|
+
renderEmptyState = _ref2.renderEmptyState;
|
|
68
|
+
if (collectionSize > 0) return null;
|
|
69
|
+
if (loadingState && LOADING_STATES.has(loadingState)) {
|
|
70
|
+
return (0, _react2.jsx)(_.Box, {
|
|
71
|
+
as: "tr",
|
|
72
|
+
display: "table-row"
|
|
73
|
+
}, (0, _react2.jsx)(BoxCell, {
|
|
74
|
+
colSpan: colSpan
|
|
75
|
+
}, (0, _react2.jsx)(_.Loader, {
|
|
76
|
+
variant: "loader.withinDataTable"
|
|
77
|
+
})));
|
|
78
|
+
}
|
|
79
|
+
return (0, _react2.jsx)(_.Box, {
|
|
80
|
+
as: "tr",
|
|
81
|
+
display: "table-row"
|
|
82
|
+
}, (0, _react2.jsx)(BoxCell, {
|
|
83
|
+
colSpan: colSpan,
|
|
84
|
+
sx: {
|
|
85
|
+
textAlign: 'center'
|
|
86
|
+
}
|
|
87
|
+
}, (_renderEmptyState = renderEmptyState === null || renderEmptyState === void 0 ? void 0 : renderEmptyState()) !== null && _renderEmptyState !== void 0 ? _renderEmptyState : (0, _react2.jsx)(_TableBaseEmptyState["default"], null)));
|
|
88
|
+
}
|
|
42
89
|
var useHandleFocusRef = function useHandleFocusRef(ref) {
|
|
43
90
|
_react["default"].useEffect(function () {
|
|
44
91
|
var el = ref.current;
|
|
@@ -68,11 +115,13 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
68
115
|
isStickyHeader = _props$isStickyHeader === void 0 ? false : _props$isStickyHeader,
|
|
69
116
|
className = props.className,
|
|
70
117
|
isLastColumnSticky = props.isLastColumnSticky,
|
|
118
|
+
loadingState = props.loadingState,
|
|
119
|
+
renderEmptyState = props.renderEmptyState,
|
|
71
120
|
onResizeStart = props.onResizeStart,
|
|
72
121
|
onResize = props.onResize,
|
|
73
122
|
onResizeEnd = props.onResizeEnd,
|
|
74
123
|
onRowAction = props.onRowAction,
|
|
75
|
-
others = (0, _objectWithoutProperties2["default"])(props,
|
|
124
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded2);
|
|
76
125
|
var tableRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
|
77
126
|
var headerRef = (0, _react.useRef)(null);
|
|
78
127
|
var scrollRef = (0, _react.useRef)(null);
|
|
@@ -231,18 +280,12 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
231
280
|
})), (0, _react2.jsx)(TableRowGroup, (0, _extends2["default"])({
|
|
232
281
|
ref: bodyRef,
|
|
233
282
|
type: "tbody"
|
|
234
|
-
}, collection.body.props),
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
justifyContent: "center",
|
|
241
|
-
px: "lg",
|
|
242
|
-
py: "md"
|
|
243
|
-
}, (0, _react2.jsx)(_.Loader, {
|
|
244
|
-
variant: "loader.withinDataTable"
|
|
245
|
-
})), (0, _map2["default"])(_context3 = (0, _from["default"])(collection.body.childNodes)).call(_context3, function (row) {
|
|
283
|
+
}, omitTableBodyProps(collection.body.props)), (0, _react2.jsx)(LoadingOrEmptyState, {
|
|
284
|
+
loadingState: loadingState,
|
|
285
|
+
collectionSize: collection.size,
|
|
286
|
+
colSpan: collection.columns.length,
|
|
287
|
+
renderEmptyState: renderEmptyState
|
|
288
|
+
}), (0, _map2["default"])(_context3 = (0, _from["default"])(collection.body.childNodes)).call(_context3, function (row) {
|
|
246
289
|
var _context4, _collection$getChildr, _collection$getChildr2;
|
|
247
290
|
return (0, _react2.jsx)(TableRow, {
|
|
248
291
|
key: row.key,
|
|
@@ -271,7 +314,7 @@ var TableBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
271
314
|
});
|
|
272
315
|
var TableCaption = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
273
316
|
var caption = props.caption,
|
|
274
|
-
others = (0, _objectWithoutProperties2["default"])(props,
|
|
317
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded3);
|
|
275
318
|
if (!caption) {
|
|
276
319
|
return null;
|
|
277
320
|
}
|
|
@@ -288,7 +331,7 @@ var TableRowGroup = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
|
288
331
|
children = props.children,
|
|
289
332
|
className = props.className,
|
|
290
333
|
isSticky = props.isSticky,
|
|
291
|
-
others = (0, _objectWithoutProperties2["default"])(props,
|
|
334
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded4);
|
|
292
335
|
var _useTableRowGroup = (0, _table.useTableRowGroup)(),
|
|
293
336
|
rowGroupProps = _useTableRowGroup.rowGroupProps;
|
|
294
337
|
var _useStatusClasses2 = (0, _hooks.useStatusClasses)(className, {
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
|
6
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
|
7
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
|
9
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
|
10
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
|
4
11
|
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
|
5
12
|
var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
|
|
6
13
|
var _Object$create = require("@babel/runtime-corejs3/core-js-stable/object/create");
|
|
@@ -12,12 +19,11 @@ var _Promise = require("@babel/runtime-corejs3/core-js-stable/promise");
|
|
|
12
19
|
var _Symbol$iterator = require("@babel/runtime-corejs3/core-js-stable/symbol/iterator");
|
|
13
20
|
var _reverseInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/reverse");
|
|
14
21
|
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
|
15
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
|
16
22
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
17
23
|
_Object$defineProperty(exports, "__esModule", {
|
|
18
24
|
value: true
|
|
19
25
|
});
|
|
20
|
-
exports["default"] = exports.WithStickyHeader = exports.WithResizableColumns = exports.WithPagination = exports.WithMinMaxColumnWidth = exports.WithLastColumnSticky = exports.RowActions = exports.MultiSelection = exports.DynamicWithSorting = exports.Default = void 0;
|
|
26
|
+
exports["default"] = exports.WithStickyHeader = exports.WithResizableColumns = exports.WithPagination = exports.WithMinMaxColumnWidth = exports.WithLoadingState = exports.WithLastColumnSticky = exports.WithEmptyState = exports.RowActions = exports.MultiSelection = exports.DynamicWithSorting = exports.DefaultEmptyStateWithButton = exports.DefaultEmptyState = exports.Default = void 0;
|
|
21
27
|
var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
|
|
22
28
|
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
|
23
29
|
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
|
|
@@ -27,6 +33,7 @@ var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stabl
|
|
|
27
33
|
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
|
28
34
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
|
|
29
35
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
|
36
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
30
37
|
var _react = _interopRequireWildcard(require("react"));
|
|
31
38
|
var _i18n = require("@react-aria/i18n");
|
|
32
39
|
var _data = require("@react-stately/data");
|
|
@@ -47,17 +54,20 @@ function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c
|
|
|
47
54
|
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof _Symbol ? _Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = _Object$create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: _bindInstanceProperty(d).call(d, e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = _Object$getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(c); function f(e) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = _Object$create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
48
55
|
function _regeneratorDefine2(e, r, n, t) { var i = _Object$defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
49
56
|
function _OverloadYield(e, d) { this.v = e, this.k = d; }
|
|
57
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
58
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
50
59
|
var _default = exports["default"] = {
|
|
51
60
|
title: 'Components/TableBase',
|
|
52
61
|
component: _.TableBase,
|
|
62
|
+
argTypes: _tableBaseAttributes.tableBaseArgTypes,
|
|
63
|
+
args: _objectSpread({}, _tableBaseAttributes.tableBaseArgs),
|
|
53
64
|
parameters: {
|
|
54
65
|
docs: {
|
|
55
66
|
page: function page() {
|
|
56
67
|
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_TableBase["default"], null), (0, _react2.jsx)(_storybookDocsLayout["default"], null));
|
|
57
68
|
}
|
|
58
69
|
}
|
|
59
|
-
}
|
|
60
|
-
argTypes: _tableBaseAttributes.tableBaseArgTypes
|
|
70
|
+
}
|
|
61
71
|
};
|
|
62
72
|
var headers = [{
|
|
63
73
|
key: 'type',
|
|
@@ -98,28 +108,28 @@ var statusVariant = {
|
|
|
98
108
|
Active: 'tableBaseBadge.healthy',
|
|
99
109
|
Inactive: 'tableBaseBadge.secondary'
|
|
100
110
|
};
|
|
101
|
-
var Default = exports.Default =
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
},
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
});
|
|
122
|
-
}
|
|
111
|
+
var Default = exports.Default = {
|
|
112
|
+
render: function render(args) {
|
|
113
|
+
var isEmpty = args.loadingState === 'loading' || args.loadingState === 'sorting';
|
|
114
|
+
return (0, _react2.jsx)(_.Card, {
|
|
115
|
+
variant: "cards.tableWrapper"
|
|
116
|
+
}, (0, _react2.jsx)(_.TableBase, args, (0, _react2.jsx)(_.THead, {
|
|
117
|
+
columns: headers
|
|
118
|
+
}, function (column) {
|
|
119
|
+
return (0, _react2.jsx)(_.Column, {
|
|
120
|
+
key: column.key,
|
|
121
|
+
minWidth: 200
|
|
122
|
+
}, column.name);
|
|
123
|
+
}), (0, _react2.jsx)(_.TBody, {
|
|
124
|
+
items: isEmpty ? [] : objects
|
|
125
|
+
}, function (item) {
|
|
126
|
+
return (0, _react2.jsx)(_.Row, {
|
|
127
|
+
key: item.id
|
|
128
|
+
}, function (columnKey) {
|
|
129
|
+
return (0, _react2.jsx)(_.Cell, null, item[columnKey]);
|
|
130
|
+
});
|
|
131
|
+
})));
|
|
132
|
+
}
|
|
123
133
|
};
|
|
124
134
|
var MultiSelection = exports.MultiSelection = function MultiSelection() {
|
|
125
135
|
var _React$useState = _react["default"].useState(new _set["default"](['1', '3'])),
|
|
@@ -471,6 +481,114 @@ var WithLastColumnSticky = exports.WithLastColumnSticky = function WithLastColum
|
|
|
471
481
|
});
|
|
472
482
|
})));
|
|
473
483
|
};
|
|
484
|
+
var WithLoadingState = exports.WithLoadingState = function WithLoadingState() {
|
|
485
|
+
return (0, _react2.jsx)(_.Card, {
|
|
486
|
+
variant: "cards.tableWrapper"
|
|
487
|
+
}, (0, _react2.jsx)(_.TableBase, {
|
|
488
|
+
caption: "Lorem ipsum",
|
|
489
|
+
"aria-label": "table",
|
|
490
|
+
loadingState: "loading"
|
|
491
|
+
}, (0, _react2.jsx)(_.THead, {
|
|
492
|
+
columns: headers
|
|
493
|
+
}, function (column) {
|
|
494
|
+
return (0, _react2.jsx)(_.Column, {
|
|
495
|
+
key: column.key,
|
|
496
|
+
minWidth: 200
|
|
497
|
+
}, column.name);
|
|
498
|
+
}), (0, _react2.jsx)(_.TBody, {
|
|
499
|
+
items: []
|
|
500
|
+
}, function () {
|
|
501
|
+
return (0, _react2.jsx)(_.Row, {
|
|
502
|
+
key: "unused"
|
|
503
|
+
}, function () {
|
|
504
|
+
return (0, _react2.jsx)(_.Cell, null, "Hello 0");
|
|
505
|
+
});
|
|
506
|
+
})));
|
|
507
|
+
};
|
|
508
|
+
var WithEmptyState = exports.WithEmptyState = function WithEmptyState() {
|
|
509
|
+
return (0, _react2.jsx)(_.Card, {
|
|
510
|
+
variant: "cards.tableWrapper"
|
|
511
|
+
}, (0, _react2.jsx)(_.TableBase, {
|
|
512
|
+
caption: "Custom empty state",
|
|
513
|
+
"aria-label": "table with custom empty state",
|
|
514
|
+
renderEmptyState: function renderEmptyState() {
|
|
515
|
+
return (0, _react2.jsx)("div", null, "No data available");
|
|
516
|
+
}
|
|
517
|
+
}, (0, _react2.jsx)(_.THead, {
|
|
518
|
+
columns: headers
|
|
519
|
+
}, function (column) {
|
|
520
|
+
return (0, _react2.jsx)(_.Column, {
|
|
521
|
+
key: column.key,
|
|
522
|
+
minWidth: 200
|
|
523
|
+
}, column.name);
|
|
524
|
+
}), (0, _react2.jsx)(_.TBody, {
|
|
525
|
+
items: []
|
|
526
|
+
}, function () {
|
|
527
|
+
return (0, _react2.jsx)(_.Row, {
|
|
528
|
+
key: "unused"
|
|
529
|
+
}, function () {
|
|
530
|
+
return (0, _react2.jsx)(_.Cell, null, "Hello 2");
|
|
531
|
+
});
|
|
532
|
+
})));
|
|
533
|
+
};
|
|
534
|
+
var DefaultEmptyState = exports.DefaultEmptyState = function DefaultEmptyState() {
|
|
535
|
+
return (0, _react2.jsx)(_.Card, {
|
|
536
|
+
variant: "cards.tableWrapper"
|
|
537
|
+
}, (0, _react2.jsx)(_.TableBase, {
|
|
538
|
+
caption: "Default empty state",
|
|
539
|
+
"aria-label": "table with default empty state"
|
|
540
|
+
}, (0, _react2.jsx)(_.THead, {
|
|
541
|
+
columns: headers
|
|
542
|
+
}, function (column) {
|
|
543
|
+
return (0, _react2.jsx)(_.Column, {
|
|
544
|
+
key: column.key,
|
|
545
|
+
minWidth: 200
|
|
546
|
+
}, column.name);
|
|
547
|
+
}), (0, _react2.jsx)(_.TBody, {
|
|
548
|
+
items: []
|
|
549
|
+
}, function () {
|
|
550
|
+
return (0, _react2.jsx)(_.Row, {
|
|
551
|
+
key: "unused"
|
|
552
|
+
}, function () {
|
|
553
|
+
return (0, _react2.jsx)(_.Cell, null, "Hello 1");
|
|
554
|
+
});
|
|
555
|
+
})));
|
|
556
|
+
};
|
|
557
|
+
var DefaultEmptyStateWithButton = exports.DefaultEmptyStateWithButton = function DefaultEmptyStateWithButton() {
|
|
558
|
+
var handleAddItem = function handleAddItem() {
|
|
559
|
+
// eslint-disable-next-line no-console
|
|
560
|
+
console.log('Add button clicked!');
|
|
561
|
+
};
|
|
562
|
+
return (0, _react2.jsx)(_.Card, {
|
|
563
|
+
variant: "cards.tableWrapper"
|
|
564
|
+
}, (0, _react2.jsx)(_.TableBase, {
|
|
565
|
+
caption: "Empty state with action button",
|
|
566
|
+
"aria-label": "table with empty state and action button",
|
|
567
|
+
renderEmptyState: function renderEmptyState() {
|
|
568
|
+
return (0, _react2.jsx)(_.TableBaseEmptyState, {
|
|
569
|
+
headerLabel: "No items available",
|
|
570
|
+
descriptionLabel: "Click the button below to add a new item",
|
|
571
|
+
addButtonLabel: "Add Item",
|
|
572
|
+
onAddButtonPress: handleAddItem
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
}, (0, _react2.jsx)(_.THead, {
|
|
576
|
+
columns: headers
|
|
577
|
+
}, function (column) {
|
|
578
|
+
return (0, _react2.jsx)(_.Column, {
|
|
579
|
+
key: column.key,
|
|
580
|
+
minWidth: 200
|
|
581
|
+
}, column.name);
|
|
582
|
+
}), (0, _react2.jsx)(_.TBody, {
|
|
583
|
+
items: []
|
|
584
|
+
}, function () {
|
|
585
|
+
return (0, _react2.jsx)(_.Row, {
|
|
586
|
+
key: "unused"
|
|
587
|
+
}, function () {
|
|
588
|
+
return (0, _react2.jsx)(_.Cell, null, "Hello 3");
|
|
589
|
+
});
|
|
590
|
+
})));
|
|
591
|
+
};
|
|
474
592
|
var RowActions = exports.RowActions = function RowActions() {
|
|
475
593
|
var _useState3 = (0, _react.useState)(null),
|
|
476
594
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
@@ -560,6 +560,101 @@ test('Arrow Left move the focus to next cell', /*#__PURE__*/(0, _asyncToGenerato
|
|
|
560
560
|
}
|
|
561
561
|
}, _callee10);
|
|
562
562
|
})));
|
|
563
|
+
var renderWithLoadingState = function renderWithLoadingState(loadingState) {
|
|
564
|
+
return (0, _react2.render)((0, _react3.jsx)(_TableBase["default"], {
|
|
565
|
+
"aria-label": "table",
|
|
566
|
+
loadingState: loadingState
|
|
567
|
+
}, (0, _react3.jsx)(_index.THead, {
|
|
568
|
+
columns: headers
|
|
569
|
+
}, function (head) {
|
|
570
|
+
return (0, _react3.jsx)(_index.Column, {
|
|
571
|
+
key: head.key
|
|
572
|
+
}, head.name);
|
|
573
|
+
}), (0, _react3.jsx)(_index.TBody, {
|
|
574
|
+
items: []
|
|
575
|
+
}, function () {
|
|
576
|
+
return (0, _react3.jsx)(_index.Row, null, (0, _react3.jsx)(_index.Cell, null, "A"), (0, _react3.jsx)(_index.Cell, null, "B"), (0, _react3.jsx)(_index.Cell, null, "C"));
|
|
577
|
+
})));
|
|
578
|
+
};
|
|
579
|
+
describe('Loading state', function () {
|
|
580
|
+
test('renders Loader when loadingState is "loading"', function () {
|
|
581
|
+
renderWithLoadingState('loading');
|
|
582
|
+
expect(_react2.screen.getByRole('alert')).toBeInTheDocument();
|
|
583
|
+
});
|
|
584
|
+
test('renders Loader when loadingState is "sorting"', function () {
|
|
585
|
+
renderWithLoadingState('sorting');
|
|
586
|
+
expect(_react2.screen.getByRole('alert')).toBeInTheDocument();
|
|
587
|
+
});
|
|
588
|
+
test('does not render Loader when loadingState is absent', function () {
|
|
589
|
+
renderWithLoadingState();
|
|
590
|
+
expect(_react2.screen.queryByRole('alert')).not.toBeInTheDocument();
|
|
591
|
+
});
|
|
592
|
+
test('does not render Loader when loadingState is "loadingMore", renders empty state instead (Constraint #6)', function () {
|
|
593
|
+
renderWithLoadingState('loadingMore');
|
|
594
|
+
expect(_react2.screen.queryByRole('alert')).not.toBeInTheDocument();
|
|
595
|
+
expect(_react2.screen.getByText('No items exist')).toBeInTheDocument();
|
|
596
|
+
});
|
|
597
|
+
});
|
|
598
|
+
describe('Empty state', function () {
|
|
599
|
+
test('renders default empty state when items is empty and no loadingState', function () {
|
|
600
|
+
(0, _react2.render)((0, _react3.jsx)(_TableBase["default"], {
|
|
601
|
+
"aria-label": "table"
|
|
602
|
+
}, (0, _react3.jsx)(_index.THead, {
|
|
603
|
+
columns: headers
|
|
604
|
+
}, function (head) {
|
|
605
|
+
return (0, _react3.jsx)(_index.Column, {
|
|
606
|
+
key: head.key
|
|
607
|
+
}, head.name);
|
|
608
|
+
}), (0, _react3.jsx)(_index.TBody, {
|
|
609
|
+
items: []
|
|
610
|
+
}, function () {
|
|
611
|
+
return (0, _react3.jsx)(_index.Row, null, (0, _react3.jsx)(_index.Cell, null), (0, _react3.jsx)(_index.Cell, null), (0, _react3.jsx)(_index.Cell, null));
|
|
612
|
+
})));
|
|
613
|
+
expect(_react2.screen.getByText('No items exist')).toBeInTheDocument();
|
|
614
|
+
});
|
|
615
|
+
test('renders custom renderEmptyState and not default empty state', function () {
|
|
616
|
+
(0, _react2.render)((0, _react3.jsx)(_TableBase["default"], {
|
|
617
|
+
"aria-label": "table",
|
|
618
|
+
renderEmptyState: function renderEmptyState() {
|
|
619
|
+
return (0, _react3.jsx)("div", null, "Custom");
|
|
620
|
+
}
|
|
621
|
+
}, (0, _react3.jsx)(_index.THead, {
|
|
622
|
+
columns: headers
|
|
623
|
+
}, function (head) {
|
|
624
|
+
return (0, _react3.jsx)(_index.Column, {
|
|
625
|
+
key: head.key
|
|
626
|
+
}, head.name);
|
|
627
|
+
}), (0, _react3.jsx)(_index.TBody, {
|
|
628
|
+
items: []
|
|
629
|
+
}, function () {
|
|
630
|
+
return (0, _react3.jsx)(_index.Row, null, (0, _react3.jsx)(_index.Cell, null), (0, _react3.jsx)(_index.Cell, null), (0, _react3.jsx)(_index.Cell, null));
|
|
631
|
+
})));
|
|
632
|
+
expect(_react2.screen.getByText('Custom')).toBeInTheDocument();
|
|
633
|
+
expect(_react2.screen.queryByText('No items exist')).not.toBeInTheDocument();
|
|
634
|
+
});
|
|
635
|
+
test('renders Loader and not empty state when loadingState is "loading" and items is empty', function () {
|
|
636
|
+
(0, _react2.render)((0, _react3.jsx)(_TableBase["default"], {
|
|
637
|
+
"aria-label": "table",
|
|
638
|
+
loadingState: "loading",
|
|
639
|
+
renderEmptyState: function renderEmptyState() {
|
|
640
|
+
return (0, _react3.jsx)("div", null, "Custom");
|
|
641
|
+
}
|
|
642
|
+
}, (0, _react3.jsx)(_index.THead, {
|
|
643
|
+
columns: headers
|
|
644
|
+
}, function (head) {
|
|
645
|
+
return (0, _react3.jsx)(_index.Column, {
|
|
646
|
+
key: head.key
|
|
647
|
+
}, head.name);
|
|
648
|
+
}), (0, _react3.jsx)(_index.TBody, {
|
|
649
|
+
items: []
|
|
650
|
+
}, function () {
|
|
651
|
+
return (0, _react3.jsx)(_index.Row, null, (0, _react3.jsx)(_index.Cell, null), (0, _react3.jsx)(_index.Cell, null), (0, _react3.jsx)(_index.Cell, null));
|
|
652
|
+
})));
|
|
653
|
+
expect(_react2.screen.getByRole('alert')).toBeInTheDocument();
|
|
654
|
+
expect(_react2.screen.queryByText('Custom')).not.toBeInTheDocument();
|
|
655
|
+
expect(_react2.screen.queryByText('No items exist')).not.toBeInTheDocument();
|
|
656
|
+
});
|
|
657
|
+
});
|
|
563
658
|
describe('Resizable columns', function () {
|
|
564
659
|
var resizableHeaders = [{
|
|
565
660
|
key: 'name',
|