@atlaskit/table-tree 9.12.2 → 10.0.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.
Files changed (53) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/cjs/components/cell.js +19 -41
  3. package/dist/cjs/components/header.js +23 -38
  4. package/dist/cjs/components/headers.js +31 -40
  5. package/dist/cjs/components/internal/chevron.js +32 -59
  6. package/dist/cjs/components/internal/item.js +38 -52
  7. package/dist/cjs/components/internal/items.js +31 -83
  8. package/dist/cjs/components/internal/loader-item.js +34 -66
  9. package/dist/cjs/components/internal/with-column-width.js +2 -4
  10. package/dist/cjs/components/row.js +120 -177
  11. package/dist/cjs/components/rows.js +17 -37
  12. package/dist/cjs/components/table-tree.js +75 -119
  13. package/dist/es2019/components/cell.js +18 -22
  14. package/dist/es2019/components/header.js +17 -21
  15. package/dist/es2019/components/headers.js +22 -19
  16. package/dist/es2019/components/internal/chevron.js +25 -35
  17. package/dist/es2019/components/internal/item.js +32 -36
  18. package/dist/es2019/components/internal/items.js +24 -60
  19. package/dist/es2019/components/internal/loader-item.js +29 -46
  20. package/dist/es2019/components/internal/with-column-width.js +2 -4
  21. package/dist/es2019/components/row.js +95 -147
  22. package/dist/es2019/components/rows.js +17 -17
  23. package/dist/es2019/components/table-tree.js +66 -90
  24. package/dist/esm/components/cell.js +19 -38
  25. package/dist/esm/components/header.js +17 -36
  26. package/dist/esm/components/headers.js +26 -40
  27. package/dist/esm/components/internal/chevron.js +29 -57
  28. package/dist/esm/components/internal/item.js +33 -53
  29. package/dist/esm/components/internal/items.js +32 -86
  30. package/dist/esm/components/internal/loader-item.js +33 -68
  31. package/dist/esm/components/internal/with-column-width.js +2 -4
  32. package/dist/esm/components/row.js +116 -179
  33. package/dist/esm/components/rows.js +17 -35
  34. package/dist/esm/components/table-tree.js +75 -121
  35. package/dist/types/components/header.d.ts +11 -1
  36. package/dist/types/components/headers.d.ts +13 -3
  37. package/dist/types/components/internal/chevron.d.ts +15 -13
  38. package/dist/types/components/internal/item.d.ts +24 -12
  39. package/dist/types/components/internal/items.d.ts +12 -23
  40. package/dist/types/components/internal/loader-item.d.ts +7 -16
  41. package/dist/types/components/row.d.ts +11 -39
  42. package/dist/types/components/rows.d.ts +15 -10
  43. package/dist/types/components/table-tree.d.ts +10 -20
  44. package/dist/types-ts4.5/components/header.d.ts +11 -1
  45. package/dist/types-ts4.5/components/headers.d.ts +13 -3
  46. package/dist/types-ts4.5/components/internal/chevron.d.ts +15 -13
  47. package/dist/types-ts4.5/components/internal/item.d.ts +24 -12
  48. package/dist/types-ts4.5/components/internal/items.d.ts +12 -23
  49. package/dist/types-ts4.5/components/internal/loader-item.d.ts +7 -16
  50. package/dist/types-ts4.5/components/row.d.ts +11 -39
  51. package/dist/types-ts4.5/components/rows.d.ts +15 -10
  52. package/dist/types-ts4.5/components/table-tree.d.ts +10 -20
  53. package/package.json +5 -9
@@ -6,14 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = void 0;
9
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
15
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
16
- var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
11
  var _react = _interopRequireWildcard(require("react"));
18
12
  var _cell = _interopRequireDefault(require("./cell"));
19
13
  var _header = _interopRequireDefault(require("./header"));
@@ -23,17 +17,8 @@ var _row = _interopRequireDefault(require("./row"));
23
17
  var _rows = _interopRequireDefault(require("./rows"));
24
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
25
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
26
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
27
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* eslint-disable react/prop-types */
28
- var Content = /*#__PURE__*/function (_Object) {
29
- (0, _inherits2.default)(Content, _Object);
30
- var _super = _createSuper(Content);
31
- function Content() {
32
- (0, _classCallCheck2.default)(this, Content);
33
- return _super.apply(this, arguments);
34
- }
35
- return (0, _createClass2.default)(Content);
36
- }( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Object));
20
+ /* eslint-disable react/prop-types */
21
+
37
22
  /**
38
23
  * This is hard-coded here because our actual <TableTree /> has no typings
39
24
  * for its props.
@@ -42,107 +27,78 @@ var Content = /*#__PURE__*/function (_Object) {
42
27
  *
43
28
  * Defining it here for now lets us provide *something* without much headache.
44
29
  */
45
- var TableTree = exports.default = /*#__PURE__*/function (_Component) {
46
- (0, _inherits2.default)(TableTree, _Component);
47
- var _super2 = _createSuper(TableTree);
48
- function TableTree() {
49
- var _this;
50
- (0, _classCallCheck2.default)(this, TableTree);
51
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
52
- args[_key] = arguments[_key];
30
+
31
+ var emptyColumnWidths = [];
32
+ function TableTree(_ref) {
33
+ var children = _ref.children,
34
+ columns = _ref.columns,
35
+ _ref$columnWidths = _ref.columnWidths,
36
+ defaultColumnWidths = _ref$columnWidths === void 0 ? emptyColumnWidths : _ref$columnWidths,
37
+ headers = _ref.headers,
38
+ shouldExpandOnClick = _ref.shouldExpandOnClick,
39
+ items = _ref.items,
40
+ mainColumnForExpandCollapseLabel = _ref.mainColumnForExpandCollapseLabel,
41
+ label = _ref.label,
42
+ referencedLabel = _ref.referencedLabel;
43
+ var _useState = (0, _react.useState)(defaultColumnWidths),
44
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
45
+ columnWidths = _useState2[0],
46
+ setColumnWidths = _useState2[1];
47
+ var setColumnWidth = (0, _react.useCallback)(function (columnIndex, width) {
48
+ if (width === columnWidths[columnIndex]) {
49
+ return;
53
50
  }
54
- _this = _super2.call.apply(_super2, [this].concat(args));
55
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
56
- columnWidths: []
57
- });
58
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setColumnWidth", function (columnIndex, width) {
59
- var columnWidths = _this.state.columnWidths;
60
- if (width === columnWidths[columnIndex]) {
61
- return;
62
- }
63
- columnWidths[columnIndex] = width;
64
- _this.setState({
65
- columnWidths: columnWidths
66
- });
51
+ setColumnWidths(function (columnWidths) {
52
+ var newColumnWidths = (0, _toConsumableArray2.default)(columnWidths);
53
+ newColumnWidths[columnIndex] = width;
54
+ return newColumnWidths;
67
55
  });
68
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getColumnWidth", function (columnIndex) {
69
- return _this.state && _this.state.columnWidths[columnIndex] || null;
70
- });
71
- return _this;
72
- }
73
- (0, _createClass2.default)(TableTree, [{
74
- key: "componentDidMount",
75
- value: function componentDidMount() {
76
- var widths = this.props.columnWidths;
77
- if (widths) {
78
- this.setState({
79
- columnWidths: widths
80
- }); // eslint-disable-line
81
- }
82
- }
83
- }, {
84
- key: "render",
85
- value: function render() {
86
- var _this$props = this.props,
87
- items = _this$props.items,
88
- label = _this$props.label,
89
- referencedLabel = _this$props.referencedLabel,
90
- shouldExpandOnClick = _this$props.shouldExpandOnClick,
91
- headers = _this$props.headers,
92
- columns = _this$props.columns,
93
- _this$props$columnWid = _this$props.columnWidths,
94
- columnWidths = _this$props$columnWid === void 0 ? [] : _this$props$columnWid,
95
- mainColumnForExpandCollapseLabel = _this$props.mainColumnForExpandCollapseLabel;
96
- var heads = headers && /*#__PURE__*/_react.default.createElement(_headers.default, null, headers.map(function (header, index) {
97
- return (
98
- /*#__PURE__*/
99
- // eslint-disable-next-line react/no-array-index-key
100
- _react.default.createElement(_header.default, {
101
- key: index,
102
- columnIndex: index,
103
- width: columnWidths[index]
104
- }, header)
105
- );
56
+ }, [columnWidths]);
57
+ var getColumnWidth = (0, _react.useCallback)(function (columnIndex) {
58
+ return columnWidths[columnIndex] || null;
59
+ }, [columnWidths]);
60
+ var contextValue = (0, _react.useMemo)(function () {
61
+ return {
62
+ setColumnWidth: setColumnWidth,
63
+ getColumnWidth: getColumnWidth
64
+ };
65
+ }, [setColumnWidth, getColumnWidth]);
66
+ var heads = headers && /*#__PURE__*/_react.default.createElement(_headers.default, null, headers.map(function (header, index) {
67
+ return /*#__PURE__*/_react.default.createElement(_header.default, {
68
+ key: index,
69
+ columnIndex: index,
70
+ width: columnWidths[index]
71
+ }, header);
72
+ }));
73
+ return /*#__PURE__*/_react.default.createElement(_context.TableTreeContext.Provider, {
74
+ value: contextValue
75
+ }, /*#__PURE__*/_react.default.createElement("div", {
76
+ role: "treegrid",
77
+ "aria-readonly": true,
78
+ "aria-label": label,
79
+ "aria-labelledby": referencedLabel
80
+ }, heads, columns && items && /*#__PURE__*/_react.default.createElement(_rows.default, {
81
+ items: items,
82
+ render: function render(_ref2) {
83
+ var id = _ref2.id,
84
+ children = _ref2.children,
85
+ content = _ref2.content;
86
+ return /*#__PURE__*/_react.default.createElement(_row.default, {
87
+ itemId: id,
88
+ items: children,
89
+ hasChildren: !!children && children.length > 0,
90
+ shouldExpandOnClick: shouldExpandOnClick,
91
+ mainColumnForExpandCollapseLabel: mainColumnForExpandCollapseLabel
92
+ }, columns.map(function (CellContent, index) {
93
+ return /*#__PURE__*/_react.default.createElement(_cell.default, {
94
+ key: "cell-".concat(index),
95
+ columnIndex: index,
96
+ width: columnWidths[index]
97
+ }, /*#__PURE__*/_react.default.createElement(CellContent, content));
106
98
  }));
107
- var rows = null;
108
- if (columns && items) {
109
- rows = /*#__PURE__*/_react.default.createElement(_rows.default, {
110
- items: items,
111
- render: function render(_ref) {
112
- var id = _ref.id,
113
- children = _ref.children,
114
- hasChildren = _ref.hasChildren,
115
- content = _ref.content;
116
- return /*#__PURE__*/_react.default.createElement(_row.default, {
117
- itemId: id,
118
- items: children,
119
- hasChildren: hasChildren,
120
- shouldExpandOnClick: shouldExpandOnClick,
121
- mainColumnForExpandCollapseLabel: mainColumnForExpandCollapseLabel
122
- }, columns.map(function (CellContent, index) {
123
- return /*#__PURE__*/_react.default.createElement(_cell.default
124
- // eslint-disable-next-line react/no-array-index-key
125
- , {
126
- key: index,
127
- columnIndex: index,
128
- width: columnWidths[index]
129
- }, /*#__PURE__*/_react.default.createElement(CellContent, content));
130
- }));
131
- }
132
- });
133
- }
134
- return /*#__PURE__*/_react.default.createElement(_context.TableTreeContext.Provider, {
135
- value: {
136
- setColumnWidth: this.setColumnWidth,
137
- getColumnWidth: this.getColumnWidth
138
- }
139
- }, /*#__PURE__*/_react.default.createElement("div", {
140
- role: "treegrid",
141
- "aria-readonly": true,
142
- "aria-label": label,
143
- "aria-labelledby": referencedLabel
144
- }, heads, rows, this.props.children));
145
99
  }
146
- }]);
147
- return TableTree;
148
- }(_react.Component);
100
+ }), children));
101
+ }
102
+
103
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
104
+ var _default = exports.default = TableTree;
@@ -1,30 +1,26 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import React, { Component } from 'react';
2
+ import React from 'react';
3
3
  import CommonCell from './internal/common-cell';
4
4
  import OverflowContainer from './internal/overflow-container';
5
5
  import { indentBase } from './internal/styled';
6
6
  import withColumnWidth from './internal/with-column-width';
7
- class CellComponent extends Component {
8
- render() {
9
- const {
10
- children,
11
- singleLine,
12
- indentLevel,
13
- width,
14
- className,
15
- ...props
16
- } = this.props;
17
- return /*#__PURE__*/React.createElement(CommonCell, _extends({
18
- indent: indentLevel ? `calc(${indentBase} * ${indentLevel})` : undefined,
19
- width: width
20
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
21
- ,
22
- className: className
23
- }, props), /*#__PURE__*/React.createElement(OverflowContainer, {
24
- isSingleLine: singleLine
25
- }, children));
26
- }
27
- }
7
+ const CellComponent = ({
8
+ children,
9
+ singleLine,
10
+ indentLevel,
11
+ width,
12
+ className,
13
+ ...props
14
+ }) => /*#__PURE__*/React.createElement(CommonCell, _extends({
15
+ indent: indentLevel ? `calc(${indentBase} * ${indentLevel})` : undefined,
16
+ width: width
17
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
18
+ ,
19
+ className: className
20
+ // eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
21
+ }, props), /*#__PURE__*/React.createElement(OverflowContainer, {
22
+ isSingleLine: singleLine
23
+ }, children));
28
24
  const Cell = withColumnWidth(CellComponent);
29
25
 
30
26
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
@@ -1,14 +1,12 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  /**
3
2
  * @jsxRuntime classic
4
3
  * @jsx jsx
5
4
  */
6
- import { Component } from 'react';
7
5
 
8
6
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
9
7
  import { css, jsx } from '@emotion/react';
10
8
  import { N300 } from '@atlaskit/theme/colors';
11
- import ColumnCell from './internal/common-cell';
9
+ import CommonCell from './internal/common-cell';
12
10
  import withColumnWidth from './internal/with-column-width';
13
11
  const headerStyles = css({
14
12
  color: `var(--ds-text-subtle, ${N300})`,
@@ -25,24 +23,22 @@ const headerStyles = css({
25
23
  * Defining it here for now lets us provide *something* without much headache.
26
24
  */
27
25
 
28
- class HeaderComponent extends Component {
29
- render() {
30
- const {
31
- props
32
- } = this;
33
- return (
34
- // TODO: Determine whether proper `th` elements can be used instead of
35
- // roles (DSP-11588)
36
- jsx(ColumnCell, _extends({
37
- css: headerStyles,
38
- role: "columnheader",
39
- style: {
40
- width: props.width
41
- }
42
- }, props), props.children)
43
- );
44
- }
45
- }
26
+ const HeaderComponent = ({
27
+ width,
28
+ children,
29
+ onClick,
30
+ id
31
+ }) => {
32
+ // TODO: Determine whether proper `th` elements can be used instead of
33
+ // roles (DSP-11588)
34
+ return jsx(CommonCell, {
35
+ css: headerStyles,
36
+ role: "columnheader",
37
+ width: width,
38
+ id: id,
39
+ onClick: onClick
40
+ }, children);
41
+ };
46
42
  const Header = withColumnWidth(HeaderComponent);
47
43
 
48
44
  // eslint-disable-next-line @repo/internal/react/require-jsdoc
@@ -3,7 +3,7 @@
3
3
  * @jsx jsx
4
4
  */
5
5
  /* eslint-disable @repo/internal/react/no-clone-element */
6
- import { Children, cloneElement, Component } from 'react';
6
+ import { Children, cloneElement } from 'react';
7
7
 
8
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
9
9
  import { css, jsx } from '@emotion/react';
@@ -11,21 +11,24 @@ const containerStyles = css({
11
11
  display: 'flex',
12
12
  borderBlockEnd: `solid 2px ${"var(--ds-border, #dfe1e6)"}`
13
13
  });
14
- export default class Headers extends Component {
15
- render() {
16
- return (
17
- // TODO: Determine whether proper `tr` elements can be used instead of
18
- // roles (DSP-11588)
19
- jsx("div", {
20
- css: containerStyles,
21
- role: "row"
22
- }, Children.map(this.props.children, (header, index) =>
23
- /*#__PURE__*/
24
- // eslint-disable-next-line react/no-array-index-key
25
- cloneElement(header, {
26
- key: index,
27
- columnIndex: index
28
- })))
29
- );
30
- }
31
- }
14
+ /**
15
+ * __Headers__
16
+ *
17
+ * Headers component for advanced composition of data, allowing custom data structures.
18
+ *
19
+ * - [Examples](https://atlassian.design/components/table-tree/examples#advanced)
20
+ * - [Code](https://atlassian.design/components/table-tree/code#headers-props)
21
+ */
22
+ const Headers = ({
23
+ children
24
+ }) =>
25
+ // TODO: Determine whether proper `tr` elements can be used instead of
26
+ // roles (DSP-11588)
27
+ jsx("div", {
28
+ css: containerStyles,
29
+ role: "row"
30
+ }, Children.map(children, (header, index) => /*#__PURE__*/cloneElement(header, {
31
+ key: index,
32
+ columnIndex: index
33
+ })));
34
+ export default Headers;
@@ -1,41 +1,31 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  /* eslint-disable @repo/internal/react/consistent-props-definitions */
3
2
  /* eslint-disable react/prop-types */
4
- import React, { Component } from 'react';
3
+ import React from 'react';
5
4
  import { IconButton } from '@atlaskit/button/new';
5
+ import __noop from '@atlaskit/ds-lib/noop';
6
6
  import ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';
7
7
  import ChevronRightIcon from '@atlaskit/icon/glyph/chevron-right';
8
8
  import { ChevronContainer } from './styled';
9
- export default class Chevron extends Component {
10
- constructor(...args) {
11
- super(...args);
12
- _defineProperty(this, "handleClick", () => {
13
- if (this.props.onExpandToggle) {
14
- this.props.onExpandToggle();
15
- }
16
- });
17
- }
18
- render() {
19
- const {
20
- isExpanded,
21
- ariaControls,
22
- collapseLabel,
23
- expandLabel,
24
- rowId,
25
- extendedLabel
26
- } = this.props;
27
- const getLabel = defaultLabel => extendedLabel ? `${defaultLabel} ${extendedLabel} row` : `${defaultLabel} row ${rowId}`;
28
- return /*#__PURE__*/React.createElement(ChevronContainer, null, /*#__PURE__*/React.createElement(IconButton, {
29
- appearance: "subtle",
30
- onClick: this.handleClick,
31
- spacing: "compact",
32
- icon: isExpanded ? ChevronDownIcon : ChevronRightIcon,
33
- "aria-controls": ariaControls,
34
- label: isExpanded ? getLabel(collapseLabel) : getLabel(expandLabel)
35
- }));
36
- }
37
- }
38
- _defineProperty(Chevron, "defaultProps", {
39
- expandLabel: 'Expand',
40
- collapseLabel: 'Collapse'
41
- });
9
+ /**
10
+ * Internal chevron component.
11
+ */
12
+ const Chevron = ({
13
+ isExpanded,
14
+ ariaControls,
15
+ collapseLabel = 'Collapse',
16
+ expandLabel = 'Expand',
17
+ rowId,
18
+ extendedLabel,
19
+ onExpandToggle = __noop
20
+ }) => {
21
+ const getLabel = defaultLabel => extendedLabel ? `${defaultLabel} ${extendedLabel} row` : `${defaultLabel} row ${rowId}`;
22
+ return /*#__PURE__*/React.createElement(ChevronContainer, null, /*#__PURE__*/React.createElement(IconButton, {
23
+ appearance: "subtle",
24
+ onClick: onExpandToggle,
25
+ spacing: "compact",
26
+ icon: isExpanded ? ChevronDownIcon : ChevronRightIcon,
27
+ "aria-controls": ariaControls,
28
+ label: isExpanded ? getLabel(collapseLabel) : getLabel(expandLabel)
29
+ }));
30
+ };
31
+ export default Chevron;
@@ -1,48 +1,44 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  /**
3
2
  * @jsxRuntime classic
4
3
  * @jsx jsx
5
4
  */
6
5
  /* eslint-disable @repo/internal/react/no-clone-element */
7
- import { cloneElement, Component } from 'react';
6
+ import { cloneElement } from 'react';
8
7
 
9
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
10
9
  import { jsx } from '@emotion/react';
11
10
  import toItemId from '../../utils/to-item-id';
12
11
  import Items from './items';
13
- export default class Item extends Component {
14
- render() {
15
- // eslint-disable-next-line react/prop-types
16
- const {
17
- depth,
18
- data,
19
- render,
20
- loadingLabel
21
- } = this.props;
22
- const renderedRow = render(data);
23
- if (!renderedRow) {
24
- return null;
25
- }
26
- const {
27
- itemId,
28
- items
29
- } = renderedRow.props;
30
- return /*#__PURE__*/cloneElement(renderedRow, {
31
- depth,
32
- data,
33
- loadingLabel,
34
- renderChildren: () => jsx("div", {
35
- id: toItemId(itemId)
36
- }, jsx(Items, {
37
- parentData: data,
38
- depth: depth,
39
- items: items,
40
- render: render,
41
- loadingLabel: loadingLabel
42
- }))
43
- });
12
+ /**
13
+ * __Item__
14
+ * Internal item component.
15
+ */
16
+ function Item({
17
+ depth = 0,
18
+ data,
19
+ render,
20
+ loadingLabel
21
+ }) {
22
+ const renderedRow = render(data);
23
+ if (!renderedRow) {
24
+ return null;
44
25
  }
26
+
27
+ // itemId exists on RowProps, but not on RowsProps
28
+ const itemId = 'itemId' in renderedRow.props ? renderedRow.props.itemId : undefined;
29
+ const items = renderedRow.props.items;
30
+ return /*#__PURE__*/cloneElement(renderedRow, {
31
+ depth,
32
+ data,
33
+ loadingLabel,
34
+ renderChildren: () => jsx("div", {
35
+ id: !!itemId ? toItemId(itemId) : undefined
36
+ }, jsx(Items, {
37
+ depth: depth,
38
+ items: items,
39
+ render: render,
40
+ loadingLabel: loadingLabel
41
+ }))
42
+ });
45
43
  }
46
- _defineProperty(Item, "defaultProps", {
47
- depth: 0
48
- });
44
+ export default Item;
@@ -1,63 +1,27 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- /* eslint-disable react/prop-types */
3
- import React, { Component } from 'react';
1
+ import React, { useState } from 'react';
4
2
  import Item from './item';
5
3
  import LoaderItem from './loader-item';
6
- export default class Items extends Component {
7
- constructor(...args) {
8
- super(...args);
9
- _defineProperty(this, "state", {
10
- isLoaderShown: false
11
- });
12
- _defineProperty(this, "handleLoaderComplete", () => {
13
- this.setState({
14
- isLoaderShown: false
15
- });
16
- });
17
- }
18
- static getDerivedStateFromProps(nextProps, prevState) {
19
- if (!nextProps.items && !prevState.isLoaderShown) {
20
- return {
21
- isLoaderShown: true
22
- };
23
- }
24
- return null;
25
- }
26
- renderLoader() {
27
- const {
28
- depth,
29
- items,
30
- loadingLabel
31
- } = this.props;
32
- return /*#__PURE__*/React.createElement(LoaderItem, {
33
- isCompleting: !!(items && items.length),
34
- onComplete: this.handleLoaderComplete,
35
- depth: depth + 1,
36
- loadingLabel: loadingLabel
37
- });
38
- }
39
- renderItems() {
40
- const {
41
- render,
42
- items,
43
- loadingLabel,
44
- depth = 0
45
- } = this.props;
46
- return items && items.map((itemData, index) => /*#__PURE__*/React.createElement(Item, {
47
- data: itemData,
48
- depth: depth + 1,
49
- key: itemData && itemData.id || index,
50
- render: render,
51
- loadingLabel: loadingLabel
52
- }));
53
- }
54
- render() {
55
- const {
56
- isLoaderShown
57
- } = this.state;
58
- return isLoaderShown ? this.renderLoader() : this.renderItems();
59
- }
4
+ function Items({
5
+ depth = 0,
6
+ items,
7
+ loadingLabel,
8
+ render
9
+ }) {
10
+ const [isLoaderShown, setIsLoaderShown] = useState(false);
11
+ const handleLoaderComplete = () => setIsLoaderShown(false);
12
+ return !items || isLoaderShown ? /*#__PURE__*/React.createElement(LoaderItem, {
13
+ isCompleting: !!(items && items.length),
14
+ onComplete: handleLoaderComplete,
15
+ depth: depth + 1,
16
+ loadingLabel: loadingLabel
17
+ }) : /*#__PURE__*/React.createElement(React.Fragment, null, items.map(data => /*#__PURE__*/React.createElement(Item, {
18
+ data: data,
19
+ depth: depth + 1,
20
+ key: data.id,
21
+ render: render,
22
+ loadingLabel: loadingLabel
23
+ })));
60
24
  }
61
- _defineProperty(Items, "defaultProps", {
62
- depth: 0
63
- });
25
+
26
+ // eslint-disable-next-line @repo/internal/react/require-jsdoc
27
+ export default Items;