@atlaskit/table 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/constellation/index/examples.mdx +1 -1
  3. package/constellation/index/props.mdx +6 -21
  4. package/dist/cjs/body.js +18 -25
  5. package/dist/cjs/hooks/selection-provider.js +2 -11
  6. package/dist/cjs/hooks/use-selectable.js +15 -26
  7. package/dist/cjs/hooks/use-sorting.js +10 -1
  8. package/dist/cjs/hooks/use-table.js +4 -1
  9. package/dist/cjs/row.js +14 -12
  10. package/dist/cjs/selectable-cell.js +8 -5
  11. package/dist/cjs/sortable-column.js +15 -39
  12. package/dist/cjs/table.js +15 -8
  13. package/dist/cjs/thead.js +6 -5
  14. package/dist/cjs/ui/index.js +9 -1
  15. package/dist/cjs/ui/sort-icon.js +56 -0
  16. package/dist/cjs/version.json +1 -1
  17. package/dist/es2019/body.js +14 -25
  18. package/dist/es2019/hooks/selection-provider.js +2 -9
  19. package/dist/es2019/hooks/use-selectable.js +2 -8
  20. package/dist/es2019/hooks/use-sorting.js +10 -1
  21. package/dist/es2019/hooks/use-table.js +2 -1
  22. package/dist/es2019/row.js +16 -12
  23. package/dist/es2019/selectable-cell.js +7 -5
  24. package/dist/es2019/sortable-column.js +8 -31
  25. package/dist/es2019/table.js +11 -7
  26. package/dist/es2019/thead.js +5 -3
  27. package/dist/es2019/ui/index.js +2 -1
  28. package/dist/es2019/ui/sort-icon.js +42 -0
  29. package/dist/es2019/version.json +1 -1
  30. package/dist/esm/body.js +18 -27
  31. package/dist/esm/hooks/selection-provider.js +2 -9
  32. package/dist/esm/hooks/use-selectable.js +13 -25
  33. package/dist/esm/hooks/use-sorting.js +10 -1
  34. package/dist/esm/hooks/use-table.js +4 -1
  35. package/dist/esm/row.js +14 -12
  36. package/dist/esm/selectable-cell.js +9 -6
  37. package/dist/esm/sortable-column.js +10 -33
  38. package/dist/esm/table.js +11 -5
  39. package/dist/esm/thead.js +5 -4
  40. package/dist/esm/ui/index.js +2 -1
  41. package/dist/esm/ui/sort-icon.js +41 -0
  42. package/dist/esm/version.json +1 -1
  43. package/dist/types/body.d.ts +1 -1
  44. package/dist/types/hooks/selection-provider.d.ts +11 -14
  45. package/dist/types/hooks/use-selectable.d.ts +31 -7
  46. package/dist/types/hooks/use-sorting.d.ts +1 -0
  47. package/dist/types/hooks/use-table.d.ts +1 -0
  48. package/dist/types/row.d.ts +4 -0
  49. package/dist/types/sortable-column.d.ts +4 -0
  50. package/dist/types/table.d.ts +4 -0
  51. package/dist/types/ui/base-cell.d.ts +36 -0
  52. package/dist/types/ui/index.d.ts +1 -0
  53. package/dist/types/ui/sort-icon.d.ts +10 -0
  54. package/dist/types/ui/table.d.ts +5 -1
  55. package/dist/types/ui/tr.d.ts +10 -0
  56. package/extract-react-types/cell.tsx +3 -0
  57. package/extract-react-types/row.tsx +8 -0
  58. package/extract-react-types/table.tsx +8 -0
  59. package/package.json +5 -3
  60. package/report.api.md +0 -1
  61. package/tmp/api-report-tmp.d.ts +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/table
2
2
 
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`7d3f2c3c117`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7d3f2c3c117) - Iterate on typings and component performance
8
+
3
9
  ## 0.1.0
4
10
 
5
11
  ### Minor Changes
@@ -11,7 +11,7 @@ A table is composed of simple composable elements. In its base form these UI ele
11
11
 
12
12
  <Example Component={BasicAKTableExample} packageName="@atlaskit/table" />
13
13
 
14
- ## Basic
14
+ ## Basic data table
15
15
 
16
16
  A data table is used to display dynamic data.
17
17
 
@@ -1,32 +1,17 @@
1
- import TableProps from '!!extract-react-types-loader!../../src/table';
2
- import TableBodyProps from '!!extract-react-types-loader!../../src/body';
3
- import TableHeadProps from '!!extract-react-types-loader!../../src/thead';
4
- import CellProps from '!!extract-react-types-loader!../../src/ui/td';
5
- import HeadCellProps from '!!extract-react-types-loader!../../src/head-cell';
6
- import RowProps from '!!extract-react-types-loader!../../src/row';
1
+ import TableProps from '!!extract-react-types-loader!../../extract-react-types/table.tsx';
2
+ import RowProps from '!!extract-react-types-loader!../../extract-react-types/row.tsx';
3
+ import CellProps from '!!extract-react-types-loader!../../extract-react-types/cell.tsx';
7
4
 
8
5
  ## Props
9
6
 
10
- ### Table Props
7
+ ### Table props
11
8
 
12
9
  <PropsTable heading="" props={TableProps} />
13
10
 
14
- ### Table body props
15
-
16
- <PropsTable heading="" props={TableBodyProps} />
17
-
18
- ### Table head props
19
-
20
- <PropsTable heading="" props={TableHeadProps} />
21
-
22
- ### HeadCell props
23
-
24
- <PropsTable heading="" props={HeadCellProps} />
25
-
26
11
  ### Row props
27
12
 
28
- <PropsTable heading="" props={RowProps} />
13
+ <PropsTable heading="Row props" props={RowProps} />
29
14
 
30
15
  ### Cell props
31
16
 
32
- <PropsTable heading="" props={CellProps} />
17
+ <PropsTable heading="Cell props" props={CellProps} />
package/dist/cjs/body.js CHANGED
@@ -47,45 +47,38 @@ function TBody(_ref) {
47
47
  children = _ref.children;
48
48
 
49
49
  var _useTable = (0, _useTable2.useTable)(),
50
- sortKey = _useTable.sortKey,
51
- sortDirection = _useTable.sortDirection;
50
+ sortFn = _useTable.sortFn;
52
51
 
53
52
  var _useSelection = (0, _selectionProvider.useSelection)(),
54
53
  _useSelection2 = (0, _slicedToArray2.default)(_useSelection, 2),
55
54
  _state = _useSelection2[0],
56
55
  _useSelection2$ = _useSelection2[1],
57
56
  removeAll = _useSelection2$.removeAll,
58
- setMax = _useSelection2$.setMax; // TODO this seems like something the user should control
57
+ setMax = _useSelection2$.setMax; // TODO: this seems like something the user should control or opt into.
59
58
 
60
59
 
61
60
  (0, _react.useEffect)(function () {
62
- if (removeAll) {
63
- removeAll();
64
- } // eslint-disable-next-line react-hooks/exhaustive-deps
61
+ removeAll === null || removeAll === void 0 ? void 0 : removeAll(); // eslint-disable-next-line react-hooks/exhaustive-deps -- When the rows change, we [currently] want to call removeAll.
62
+ }, [rows]);
65
63
 
66
- }, [rows]); // Set data length (via setMax) whenever data changes
64
+ var childrenCount = _react.Children.count(children);
67
65
 
68
- (0, _react.useEffect)(function () {
69
- var numRows = rows !== undefined ? rows.length : _react.Children.count(children);
70
- setMax && setMax(numRows); // eslint-disable-next-line react-hooks/exhaustive-deps
71
- }, [rows === null || rows === void 0 ? void 0 : rows.length, _react.Children.count(children)]);
72
-
73
- var sortFn = function sortFn(rowA, rowB) {
74
- if (sortKey === 'unset') {
75
- return 0;
76
- }
77
-
78
- var ascendingComparator = rowA[sortKey] < rowB[sortKey] ? -1 : 1;
79
- return sortDirection === 'ascending' ? ascendingComparator : -ascendingComparator;
80
- };
66
+ var rowsLength = rows === null || rows === void 0 ? void 0 : rows.length; // Set data length (via setMax) whenever data changes
81
67
 
68
+ (0, _react.useEffect)(function () {
69
+ var numRows = rowsLength !== null && rowsLength !== void 0 ? rowsLength : childrenCount;
70
+ setMax === null || setMax === void 0 ? void 0 : setMax(numRows);
71
+ }, [rowsLength, childrenCount, setMax]);
72
+ var sortedRows = (0, _react.useMemo)(function () {
73
+ return rows === null || rows === void 0 ? void 0 : rows.map(function (row, idx) {
74
+ return _objectSpread(_objectSpread({}, row), {}, {
75
+ idx: idx
76
+ });
77
+ }).sort(sortFn);
78
+ }, [rows, sortFn]);
82
79
  return (0, _react2.jsx)(_useTableBody.TableBodyProvider, {
83
80
  value: true
84
- }, (0, _react2.jsx)(Primitives.TBody, null, typeof children === 'function' && rows ? rows.map(function (row, idx) {
85
- return _objectSpread(_objectSpread({}, row), {}, {
86
- idx: idx
87
- });
88
- }).sort(sortFn).map(function (_ref2) {
81
+ }, (0, _react2.jsx)(Primitives.TBody, null, typeof children === 'function' && sortedRows ? sortedRows.map(function (_ref2) {
89
82
  var idx = _ref2.idx,
90
83
  row = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
91
84
  return (0, _react2.jsx)(_useRowId.RowProvider, {
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  var _typeof = require("@babel/runtime/helpers/typeof");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
@@ -11,20 +9,13 @@ exports.useSelection = exports.default = void 0;
11
9
 
12
10
  var _react = _interopRequireWildcard(require("react"));
13
11
 
14
- var _useSelectable = _interopRequireDefault(require("./use-selectable"));
12
+ var _useSelectable = _interopRequireWildcard(require("./use-selectable"));
15
13
 
16
14
  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); }
17
15
 
18
16
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(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; }
19
17
 
20
- var SelectionContext = /*#__PURE__*/(0, _react.createContext)([{
21
- checked: [],
22
- allChecked: false,
23
- anyChecked: false,
24
- maxChecked: 0,
25
- selectionStart: -1,
26
- previousSelection: []
27
- }, {}]);
18
+ var SelectionContext = /*#__PURE__*/(0, _react.createContext)([_useSelectable.defaultSelectableState, {}]);
28
19
  /**
29
20
  * __Selection provider__
30
21
  *
@@ -5,19 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.defaultSelectableState = exports.default = void 0;
9
9
 
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
 
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
12
  var _react = require("react");
15
13
 
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
-
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (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; }
19
-
20
- var defaultState = {
14
+ var defaultSelectableState = {
21
15
  checked: [],
22
16
  allChecked: false,
23
17
  anyChecked: false,
@@ -25,6 +19,7 @@ var defaultState = {
25
19
  selectionStart: -1,
26
20
  previousSelection: []
27
21
  };
22
+ exports.defaultSelectableState = defaultSelectableState;
28
23
 
29
24
  var arrayFromRange = function arrayFromRange(from, to) {
30
25
  var startIdx = from;
@@ -56,15 +51,15 @@ function reducer(_ref, action) {
56
51
  case 'toggle_selection':
57
52
  {
58
53
  var _action$value = action.value,
59
- id = _action$value.id,
60
- shiftHeld = _action$value.shiftHeld;
54
+ _id = _action$value.id,
55
+ _shiftHeld = _action$value.shiftHeld;
61
56
  var updated = checked.slice();
62
57
  var newSelectionStart = selectionStart;
63
58
  var newPreviousSelection = previousSelection.slice();
64
59
 
65
- if (shiftHeld) {
60
+ if (_shiftHeld) {
66
61
  if (checked.length > 0) {
67
- var newIds = arrayFromRange(selectionStart, id); // create an array of the new ids
62
+ var newIds = arrayFromRange(selectionStart, _id); // create an array of the new ids
68
63
  // Uncheck ids from the previous selection.
69
64
  // This is done to maintain consistency with Shift-select behaviour elsewhere (e.g. macOS)
70
65
  // TODO: Code could be improved to only remove ids that are not included in the new range, avoiding needing to re-add them below
@@ -79,15 +74,15 @@ function reducer(_ref, action) {
79
74
  newPreviousSelection = newIds; // Maintain an array of the previous selection to allow for consistent Shift-select behaviour
80
75
  }
81
76
  } else {
82
- var checkedIndex = checked.indexOf(id); // is index already checked
77
+ var checkedIndex = checked.indexOf(_id); // is index already checked
83
78
 
84
79
  if (checkedIndex !== -1) {
85
80
  updated.splice(checkedIndex, 1); // if index is already checked, uncheck
86
81
  } else {
87
- updated.push(id); // if index is not checked, check
82
+ updated.push(_id); // if index is not checked, check
88
83
  }
89
84
 
90
- newSelectionStart = id; // Reset selection start id to this non-shift-selected id
85
+ newSelectionStart = _id; // Reset selection start id to this non-shift-selected id
91
86
 
92
87
  newPreviousSelection = []; // Reset previous selection as it is no longer relevant once a new non-shift-selected id is added
93
88
  }
@@ -97,7 +92,7 @@ function reducer(_ref, action) {
97
92
  return {
98
93
  checked: updated,
99
94
  allChecked: updated.length === maxChecked,
100
- anyChecked: _anyChecked || Boolean(updated[id]),
95
+ anyChecked: _anyChecked || Boolean(updated[_id]),
101
96
  maxChecked: maxChecked,
102
97
  selectionStart: newSelectionStart,
103
98
  previousSelection: newPreviousSelection
@@ -116,10 +111,10 @@ function reducer(_ref, action) {
116
111
 
117
112
  case 'set_max':
118
113
  {
119
- var max = action.value;
114
+ var _max = action.value;
120
115
  return {
121
- maxChecked: max,
122
- allChecked: checked.length === max,
116
+ maxChecked: _max,
117
+ allChecked: checked.length === _max,
123
118
  anyChecked: anyChecked,
124
119
  checked: checked,
125
120
  selectionStart: selectionStart,
@@ -132,14 +127,8 @@ function reducer(_ref, action) {
132
127
  }
133
128
  }
134
129
 
135
- var initialiseState = function initialiseState() {
136
- return _objectSpread(_objectSpread({}, defaultState), {}, {
137
- checked: []
138
- });
139
- };
140
-
141
130
  function useSelectable() {
142
- var _useReducer = (0, _react.useReducer)(reducer, initialiseState()),
131
+ var _useReducer = (0, _react.useReducer)(reducer, defaultSelectableState),
143
132
  _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
144
133
  state = _useReducer2[0],
145
134
  dispatch = _useReducer2[1];
@@ -49,10 +49,19 @@ var useSorting = function useSorting(sortKey) {
49
49
  return localSortKey;
50
50
  });
51
51
  }, [toggleSortDirection]);
52
+ var sortFn = (0, _react.useCallback)(function (rowA, rowB) {
53
+ if (localSortKey === 'unset') {
54
+ return 0;
55
+ }
56
+
57
+ var ascendingComparator = rowA[localSortKey] < rowB[localSortKey] ? -1 : 1;
58
+ return localSortDirection === 'ascending' ? ascendingComparator : -ascendingComparator;
59
+ }, [localSortDirection, localSortKey]);
52
60
  return {
53
61
  sortKey: localSortKey,
54
62
  sortDirection: localSortDirection,
55
- setSortState: setSortState
63
+ setSortState: setSortState,
64
+ sortFn: sortFn
56
65
  };
57
66
  };
58
67
 
@@ -22,7 +22,10 @@ function generateContext() {
22
22
  return /*#__PURE__*/(0, _react.createContext)({
23
23
  isSelectable: false,
24
24
  sortKey: 'unset',
25
- setSortState: _noop.default
25
+ setSortState: _noop.default,
26
+ sortFn: function sortFn() {
27
+ return 0;
28
+ }
26
29
  });
27
30
  }
28
31
 
package/dist/cjs/row.js CHANGED
@@ -19,7 +19,7 @@ var _selectionProvider = require("./hooks/selection-provider");
19
19
 
20
20
  var _useRowId = require("./hooks/use-row-id");
21
21
 
22
- var _useTable = require("./hooks/use-table");
22
+ var _useTable2 = require("./hooks/use-table");
23
23
 
24
24
  var _useTableBody = require("./hooks/use-table-body");
25
25
 
@@ -46,25 +46,27 @@ var Row = /*#__PURE__*/(0, _react.memo)(function (_ref) {
46
46
  // To ensure valid nesting
47
47
  (0, _useTableBody.useTableBody)(); // to access table state
48
48
 
49
- var table = (0, _useTable.useTable)();
49
+ var _useTable = (0, _useTable2.useTable)(),
50
+ isSelectable = _useTable.isSelectable;
50
51
 
51
52
  var _useSelection = (0, _selectionProvider.useSelection)(),
52
53
  _useSelection2 = (0, _slicedToArray2.default)(_useSelection, 1),
53
- selectionState = _useSelection2[0];
54
+ _useSelection2$ = _useSelection2[0],
55
+ allChecked = _useSelection2$.allChecked,
56
+ checked = _useSelection2$.checked;
54
57
 
55
58
  var rowId = (0, _useRowId.useRowId)();
59
+ var isSelected = (0, _react.useMemo)(function () {
60
+ if (!isSelectable) {
61
+ return undefined;
62
+ }
56
63
 
57
- if (!table.isSelectable) {
58
- return (0, _react2.jsx)(Primitives.TR, {
59
- testId: testId
60
- }, children);
61
- }
62
-
63
- var isChecked = selectionState.allChecked || selectionState.checked.includes(rowId);
64
+ return allChecked || checked.includes(rowId);
65
+ }, [allChecked, checked, isSelectable, rowId]);
64
66
  return (0, _react2.jsx)(Primitives.TR, {
65
- isSelected: !!isChecked,
67
+ isSelected: isSelected,
66
68
  testId: testId
67
- }, (0, _react2.jsx)(_selectableCell.default, null), children);
69
+ }, isSelectable && (0, _react2.jsx)(_selectableCell.default, null), children);
68
70
  });
69
71
  var _default = Row;
70
72
  exports.default = _default;
@@ -31,15 +31,18 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
31
31
  var SelectableCell = function SelectableCell() {
32
32
  var _useSelection = (0, _selectionProvider.useSelection)(),
33
33
  _useSelection2 = (0, _slicedToArray2.default)(_useSelection, 2),
34
- state = _useSelection2[0],
34
+ _useSelection2$ = _useSelection2[0],
35
+ allChecked = _useSelection2$.allChecked,
36
+ checked = _useSelection2$.checked,
35
37
  toggleSelection = _useSelection2[1].toggleSelection;
36
38
 
37
39
  var idx = (0, _useRowId.useRowId)();
38
- var isChecked = state.allChecked || state.checked.includes(idx);
40
+ var isChecked = (0, _react.useMemo)(function () {
41
+ return allChecked || checked.includes(idx);
42
+ }, [allChecked, checked, idx]);
39
43
  var onChange = (0, _react.useCallback)(function (e) {
40
- return toggleSelection(idx, e.nativeEvent.shiftKey);
41
- }, // eslint-disable-next-line react-hooks/exhaustive-deps
42
- [idx]);
44
+ return toggleSelection === null || toggleSelection === void 0 ? void 0 : toggleSelection(idx, e.nativeEvent.shiftKey);
45
+ }, [idx, toggleSelection]);
43
46
  return (0, _react2.jsx)(Primitives.SelectableCell, {
44
47
  as: "td"
45
48
  }, (0, _react2.jsx)(_checkbox.default, {
@@ -11,13 +11,11 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
13
 
14
- var _react = require("@emotion/react");
14
+ var _react = require("react");
15
15
 
16
- var _button = _interopRequireDefault(require("@atlaskit/button"));
17
-
18
- var _arrowDown = _interopRequireDefault(require("@atlaskit/icon/glyph/arrow-down"));
16
+ var _react2 = require("@emotion/react");
19
17
 
20
- var _arrowUp = _interopRequireDefault(require("@atlaskit/icon/glyph/arrow-up"));
18
+ var _button = _interopRequireDefault(require("@atlaskit/button"));
21
19
 
22
20
  var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
23
21
 
@@ -44,7 +42,7 @@ var sortingMessages = {
44
42
  number: 'Sort from 9 to 0'
45
43
  }
46
44
  };
47
- var overrideStyles = (0, _react.css)({
45
+ var overrideStyles = (0, _react2.css)({
48
46
  // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage-spacing
49
47
  margin: '0 -2px !important',
50
48
  gap: "var(--ds-space-050, 4px)",
@@ -78,47 +76,25 @@ var SortableColumn = function SortableColumn(_ref) {
78
76
  return sortingMessages.unsorted.string;
79
77
  };
80
78
 
81
- var getSortIcon = function getSortIcon() {
82
- if (sortKey === name) {
83
- switch (sortDirection) {
84
- case undefined:
85
- return undefined;
86
-
87
- case 'ascending':
88
- return (0, _react.jsx)(_arrowUp.default, {
89
- size: "small",
90
- label: "",
91
- primaryColor: "inherit"
92
- });
93
-
94
- case 'descending':
95
- return (0, _react.jsx)(_arrowDown.default, {
96
- size: "small",
97
- label: "",
98
- primaryColor: "inherit"
99
- });
100
- }
101
- }
102
-
103
- return undefined;
104
- };
105
-
79
+ var updateSortState = (0, _react.useCallback)( // @ts-expect-error: TODO: Our `name` typing is off; refer to `SortKey`
80
+ function () {
81
+ return setSortState(name);
82
+ }, [setSortState, name]);
106
83
  return (// eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
107
- (0, _react.jsx)(_ui.TH, (0, _extends2.default)({
84
+ (0, _react2.jsx)(_ui.TH, (0, _extends2.default)({
108
85
  testId: testId
109
- }, other), (0, _react.jsx)(_tooltip.default, {
86
+ }, other), (0, _react2.jsx)(_tooltip.default, {
110
87
  content: getSortMessage(),
111
88
  position: "top"
112
89
  }, function (tooltipProps) {
113
- return (0, _react.jsx)(_button.default, (0, _extends2.default)({
90
+ return (0, _react2.jsx)(_button.default, (0, _extends2.default)({
114
91
  spacing: "compact",
115
92
  appearance: "subtle",
116
- iconAfter: getSortIcon()
93
+ iconAfter: (0, _react2.jsx)(_ui.SortIcon, {
94
+ name: name
95
+ })
117
96
  }, tooltipProps, {
118
- // @ts-expect-error
119
- onClick: function onClick() {
120
- return setSortState(name);
121
- },
97
+ onClick: updateSortState,
122
98
  css: overrideStyles
123
99
  }), children);
124
100
  }))
package/dist/cjs/table.js CHANGED
@@ -9,7 +9,9 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.default = void 0;
11
11
 
12
- var _react = require("@emotion/react");
12
+ var _react = require("react");
13
+
14
+ var _react2 = require("@emotion/react");
13
15
 
14
16
  var _selectionProvider = _interopRequireDefault(require("./hooks/selection-provider"));
15
17
 
@@ -42,18 +44,23 @@ function Table(_ref) {
42
44
  var _useSorting = (0, _useSorting2.useSorting)(sortKey),
43
45
  localSortKey = _useSorting.sortKey,
44
46
  sortDirection = _useSorting.sortDirection,
45
- setSortState = _useSorting.setSortState;
47
+ setSortState = _useSorting.setSortState,
48
+ sortFn = _useSorting.sortFn;
46
49
 
47
- return (0, _react.jsx)(_useTable.TableProvider, {
48
- state: {
50
+ var tableProviderState = (0, _react.useMemo)(function () {
51
+ return {
49
52
  isSelectable: isSelectable,
50
53
  sortKey: localSortKey,
51
54
  sortDirection: sortDirection,
52
- setSortState: setSortState
53
- }
54
- }, (0, _react.jsx)(Primitives.Table, {
55
+ setSortState: setSortState,
56
+ sortFn: sortFn
57
+ };
58
+ }, [isSelectable, localSortKey, setSortState, sortDirection, sortFn]);
59
+ return (0, _react2.jsx)(_useTable.TableProvider, {
60
+ state: tableProviderState
61
+ }, (0, _react2.jsx)(Primitives.Table, {
55
62
  testId: testId
56
- }, isSelectable ? (0, _react.jsx)(_selectionProvider.default, null, children) : children));
63
+ }, isSelectable ? (0, _react2.jsx)(_selectionProvider.default, null, children) : children));
57
64
  }
58
65
 
59
66
  var _default = Table;
package/dist/cjs/thead.js CHANGED
@@ -21,7 +21,7 @@ var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"
21
21
 
22
22
  var _selectionProvider = require("./hooks/selection-provider");
23
23
 
24
- var _useTable = require("./hooks/use-table");
24
+ var _useTable2 = require("./hooks/use-table");
25
25
 
26
26
  var Primitives = _interopRequireWildcard(require("./ui"));
27
27
 
@@ -33,7 +33,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
33
33
  var THead = function THead(_ref) {
34
34
  var actions = _ref.actions,
35
35
  children = _ref.children;
36
- var table = (0, _useTable.useTable)();
36
+
37
+ var _useTable = (0, _useTable2.useTable)(),
38
+ isSelectable = _useTable.isSelectable;
37
39
 
38
40
  var _useSelection = (0, _selectionProvider.useSelection)(),
39
41
  _useSelection2 = (0, _slicedToArray2.default)(_useSelection, 2),
@@ -42,14 +44,13 @@ var THead = function THead(_ref) {
42
44
  setAll = _useSelection2$.setAll,
43
45
  removeAll = _useSelection2$.removeAll;
44
46
 
45
- var isChecked = state.allChecked || state.anyChecked;
46
-
47
- if (!table.isSelectable) {
47
+ if (!isSelectable) {
48
48
  return (0, _react.jsx)(Primitives.THead, null, (0, _react.jsx)(Primitives.TR, {
49
49
  isBodyRow: false
50
50
  }, children));
51
51
  }
52
52
 
53
+ var isChecked = state.allChecked || state.anyChecked;
53
54
  return (0, _react.jsx)(Primitives.THead, null, (0, _react.jsx)(Primitives.TR, {
54
55
  isBodyRow: false
55
56
  }, (0, _react.jsx)(Primitives.SelectableCell, {
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "SelectableCell", {
15
15
  return _selectableCell.SelectableCell;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "SortIcon", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _sortIcon.SortIcon;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "TBody", {
19
25
  enumerable: true,
20
26
  get: function get() {
@@ -66,4 +72,6 @@ var _selectableCell = require("./selectable-cell");
66
72
 
67
73
  var _thead = require("./thead");
68
74
 
69
- var _bulkActionOverlay = require("./bulk-action-overlay");
75
+ var _bulkActionOverlay = require("./bulk-action-overlay");
76
+
77
+ var _sortIcon = require("./sort-icon");
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.SortIcon = void 0;
9
+
10
+ var _react = require("react");
11
+
12
+ var _react2 = require("@emotion/react");
13
+
14
+ var _arrowDown = _interopRequireDefault(require("@atlaskit/icon/glyph/arrow-down"));
15
+
16
+ var _arrowUp = _interopRequireDefault(require("@atlaskit/icon/glyph/arrow-up"));
17
+
18
+ var _useTable2 = require("../hooks/use-table");
19
+
20
+ /* eslint-disable no-unused-vars */
21
+
22
+ /** @jsx jsx */
23
+
24
+ /**
25
+ * __SortIcon__
26
+ *
27
+ * SortIcon is used to display the sort state in our SortableColumn.
28
+ */
29
+ var SortIcon = /*#__PURE__*/(0, _react.memo)(function (_ref) {
30
+ var name = _ref.name;
31
+
32
+ var _useTable = (0, _useTable2.useTable)(),
33
+ sortKey = _useTable.sortKey,
34
+ sortDirection = _useTable.sortDirection;
35
+
36
+ if (sortKey === name) {
37
+ switch (sortDirection) {
38
+ case 'ascending':
39
+ return (0, _react2.jsx)(_arrowUp.default, {
40
+ size: "small",
41
+ label: "",
42
+ primaryColor: "inherit"
43
+ });
44
+
45
+ case 'descending':
46
+ return (0, _react2.jsx)(_arrowDown.default, {
47
+ size: "small",
48
+ label: "",
49
+ primaryColor: "inherit"
50
+ });
51
+ }
52
+ }
53
+
54
+ return null;
55
+ });
56
+ exports.SortIcon = SortIcon;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/table",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "sideEffects": false
5
5
  }