@atlaskit/table 0.1.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/CHANGELOG.md +7 -0
- package/LICENSE.md +13 -0
- package/README.md +83 -0
- package/constellation/index/examples.mdx +19 -0
- package/constellation/index/props.mdx +32 -0
- package/dist/cjs/body.js +105 -0
- package/dist/cjs/head-cell.js +42 -0
- package/dist/cjs/hooks/selection-provider.js +52 -0
- package/dist/cjs/hooks/use-row-id.js +26 -0
- package/dist/cjs/hooks/use-selectable.js +183 -0
- package/dist/cjs/hooks/use-sorting.js +59 -0
- package/dist/cjs/hooks/use-table-body.js +28 -0
- package/dist/cjs/hooks/use-table.js +56 -0
- package/dist/cjs/index.js +63 -0
- package/dist/cjs/row.js +70 -0
- package/dist/cjs/selectable-cell.js +53 -0
- package/dist/cjs/sortable-column.js +129 -0
- package/dist/cjs/table.js +60 -0
- package/dist/cjs/thead.js +73 -0
- package/dist/cjs/ui/base-cell.js +72 -0
- package/dist/cjs/ui/bulk-action-overlay.js +39 -0
- package/dist/cjs/ui/index.js +69 -0
- package/dist/cjs/ui/selectable-cell.js +39 -0
- package/dist/cjs/ui/table.js +31 -0
- package/dist/cjs/ui/tbody.js +38 -0
- package/dist/cjs/ui/td.js +38 -0
- package/dist/cjs/ui/th.js +40 -0
- package/dist/cjs/ui/thead.js +40 -0
- package/dist/cjs/ui/tr.js +68 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/body.js +66 -0
- package/dist/es2019/head-cell.js +31 -0
- package/dist/es2019/hooks/selection-provider.js +33 -0
- package/dist/es2019/hooks/use-row-id.js +13 -0
- package/dist/es2019/hooks/use-selectable.js +158 -0
- package/dist/es2019/hooks/use-sorting.js +37 -0
- package/dist/es2019/hooks/use-table-body.js +13 -0
- package/dist/es2019/hooks/use-table.js +34 -0
- package/dist/es2019/index.js +7 -0
- package/dist/es2019/row.js +41 -0
- package/dist/es2019/selectable-cell.js +25 -0
- package/dist/es2019/sortable-column.js +109 -0
- package/dist/es2019/table.js +38 -0
- package/dist/es2019/thead.js +46 -0
- package/dist/es2019/ui/base-cell.js +54 -0
- package/dist/es2019/ui/bulk-action-overlay.js +27 -0
- package/dist/es2019/ui/index.js +11 -0
- package/dist/es2019/ui/selectable-cell.js +28 -0
- package/dist/es2019/ui/table.js +22 -0
- package/dist/es2019/ui/tbody.js +26 -0
- package/dist/es2019/ui/td.js +21 -0
- package/dist/es2019/ui/th.js +26 -0
- package/dist/es2019/ui/thead.js +31 -0
- package/dist/es2019/ui/tr.js +55 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/body.js +84 -0
- package/dist/esm/head-cell.js +31 -0
- package/dist/esm/hooks/selection-provider.js +32 -0
- package/dist/esm/hooks/use-row-id.js +15 -0
- package/dist/esm/hooks/use-selectable.js +171 -0
- package/dist/esm/hooks/use-sorting.js +46 -0
- package/dist/esm/hooks/use-table-body.js +13 -0
- package/dist/esm/hooks/use-table.js +36 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/row.js +46 -0
- package/dist/esm/selectable-cell.js +31 -0
- package/dist/esm/sortable-column.js +114 -0
- package/dist/esm/table.js +39 -0
- package/dist/esm/thead.js +51 -0
- package/dist/esm/ui/base-cell.js +58 -0
- package/dist/esm/ui/bulk-action-overlay.js +28 -0
- package/dist/esm/ui/index.js +11 -0
- package/dist/esm/ui/selectable-cell.js +28 -0
- package/dist/esm/ui/table.js +21 -0
- package/dist/esm/ui/tbody.js +27 -0
- package/dist/esm/ui/td.js +26 -0
- package/dist/esm/ui/th.js +28 -0
- package/dist/esm/ui/thead.js +30 -0
- package/dist/esm/ui/tr.js +55 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/body.d.ts +15 -0
- package/dist/types/head-cell.d.ts +10 -0
- package/dist/types/hooks/selection-provider.d.ts +25 -0
- package/dist/types/hooks/use-row-id.d.ts +10 -0
- package/dist/types/hooks/use-selectable.d.ts +14 -0
- package/dist/types/hooks/use-sorting.d.ts +6 -0
- package/dist/types/hooks/use-table-body.d.ts +7 -0
- package/dist/types/hooks/use-table.d.ts +21 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/row.d.ts +14 -0
- package/dist/types/selectable-cell.d.ts +3 -0
- package/dist/types/sortable-column.d.ts +17 -0
- package/dist/types/table.d.ts +26 -0
- package/dist/types/thead.d.ts +7 -0
- package/dist/types/ui/base-cell.d.ts +30 -0
- package/dist/types/ui/bulk-action-overlay.d.ts +8 -0
- package/dist/types/ui/index.d.ts +11 -0
- package/dist/types/ui/selectable-cell.d.ts +10 -0
- package/dist/types/ui/table.d.ts +23 -0
- package/dist/types/ui/tbody.d.ts +8 -0
- package/dist/types/ui/td.d.ts +11 -0
- package/dist/types/ui/th.d.ts +11 -0
- package/dist/types/ui/thead.d.ts +10 -0
- package/dist/types/ui/tr.d.ts +16 -0
- package/package.json +101 -0
- package/primitives/package.json +15 -0
- package/report.api.md +139 -0
- package/tmp/api-report-tmp.d.ts +99 -0
package/CHANGELOG.md
ADDED
package/LICENSE.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Copyright 2022 Atlassian Pty Ltd
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Table
|
|
2
|
+
|
|
3
|
+
**WARNING!**
|
|
4
|
+
|
|
5
|
+
This is an experimental package for exploration and validation of the foundations for the Atlassian Design System.
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
A table is used to display and organise complex data.
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
`import Table from '@atlaskit/table';`
|
|
14
|
+
|
|
15
|
+
Detailed docs and example usage can be found [here](https://atlaskit.atlassian.com/packages/design-system/table).
|
|
16
|
+
|
|
17
|
+
### Render Prop
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
import '@atlaskit/css-reset';
|
|
21
|
+
import Table, { Row, Cell, TBody, THead, HeadCell } from '@atlaskit/table';
|
|
22
|
+
|
|
23
|
+
import { presidents } from './data';
|
|
24
|
+
|
|
25
|
+
type President = typeof presidents[number];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Primary UI component for user interaction
|
|
29
|
+
*/
|
|
30
|
+
export const RenderProp = ({ isSelectable }) => {
|
|
31
|
+
return (
|
|
32
|
+
<Table isSelectable={isSelectable}>
|
|
33
|
+
<THead>
|
|
34
|
+
<HeadCell>Name</HeadCell>
|
|
35
|
+
<HeadCell>Party</HeadCell>
|
|
36
|
+
<HeadCell>Year</HeadCell>
|
|
37
|
+
</THead>
|
|
38
|
+
<TBody<President> rows={presidents}>
|
|
39
|
+
{row => (
|
|
40
|
+
<Row key={row.id} {...row}>
|
|
41
|
+
<Cell>{row.nm}</Cell>
|
|
42
|
+
<Cell>{row.pp}</Cell>
|
|
43
|
+
<Cell>{row.tm}</Cell>
|
|
44
|
+
</Row>
|
|
45
|
+
)}
|
|
46
|
+
</TBody>
|
|
47
|
+
</Table>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Composition
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import '@atlaskit/css-reset';
|
|
56
|
+
import Table, { Row, Cell, TBody, THead, HeadCell } from '@atlaskit/table';
|
|
57
|
+
|
|
58
|
+
import { presidents } from './data';
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Primary UI component for user interaction
|
|
62
|
+
*/
|
|
63
|
+
export const CompositionExample = ({ isSelectable }) => {
|
|
64
|
+
return (
|
|
65
|
+
<Table isSelectable={isSelectable}>
|
|
66
|
+
<THead>
|
|
67
|
+
<HeadCell>Name</HeadCell>
|
|
68
|
+
<HeadCell>Party</HeadCell>
|
|
69
|
+
<HeadCell>Year</HeadCell>
|
|
70
|
+
</THead>
|
|
71
|
+
<TBody>
|
|
72
|
+
{presidents.map(row => (
|
|
73
|
+
<Row key={row.id}>
|
|
74
|
+
<Cell>{row.nm}</Cell>
|
|
75
|
+
<Cell>{row.pp}</Cell>
|
|
76
|
+
<Cell>{row.tm}</Cell>
|
|
77
|
+
</Row>
|
|
78
|
+
))}
|
|
79
|
+
</TBody>
|
|
80
|
+
</Table>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 0
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
import BasicAKTableExample from '../../examples/composed';
|
|
6
|
+
import AKTableExample from '../../examples/basic';
|
|
7
|
+
|
|
8
|
+
## Basic
|
|
9
|
+
|
|
10
|
+
A table is composed of simple composable elements. In its base form these UI elements are purely presentational.
|
|
11
|
+
|
|
12
|
+
<Example Component={BasicAKTableExample} packageName="@atlaskit/table" />
|
|
13
|
+
|
|
14
|
+
## Basic
|
|
15
|
+
|
|
16
|
+
A data table is used to display dynamic data.
|
|
17
|
+
|
|
18
|
+
<Example Component={AKTableExample} packageName="@atlaskit/table" />
|
|
19
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
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';
|
|
7
|
+
|
|
8
|
+
## Props
|
|
9
|
+
|
|
10
|
+
### Table Props
|
|
11
|
+
|
|
12
|
+
<PropsTable heading="" props={TableProps} />
|
|
13
|
+
|
|
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
|
+
### Row props
|
|
27
|
+
|
|
28
|
+
<PropsTable heading="" props={RowProps} />
|
|
29
|
+
|
|
30
|
+
### Cell props
|
|
31
|
+
|
|
32
|
+
<PropsTable heading="" props={CellProps} />
|
package/dist/cjs/body.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
|
|
18
|
+
var _react = require("react");
|
|
19
|
+
|
|
20
|
+
var _react2 = require("@emotion/react");
|
|
21
|
+
|
|
22
|
+
var _selectionProvider = require("./hooks/selection-provider");
|
|
23
|
+
|
|
24
|
+
var _useRowId = require("./hooks/use-row-id");
|
|
25
|
+
|
|
26
|
+
var _useTable2 = require("./hooks/use-table");
|
|
27
|
+
|
|
28
|
+
var _useTableBody = require("./hooks/use-table-body");
|
|
29
|
+
|
|
30
|
+
var Primitives = _interopRequireWildcard(require("./ui"));
|
|
31
|
+
|
|
32
|
+
var _excluded = ["idx"];
|
|
33
|
+
|
|
34
|
+
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); }
|
|
35
|
+
|
|
36
|
+
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; }
|
|
37
|
+
|
|
38
|
+
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; }
|
|
39
|
+
|
|
40
|
+
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; }
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* __Table body__
|
|
44
|
+
*/
|
|
45
|
+
function TBody(_ref) {
|
|
46
|
+
var rows = _ref.rows,
|
|
47
|
+
children = _ref.children;
|
|
48
|
+
|
|
49
|
+
var _useTable = (0, _useTable2.useTable)(),
|
|
50
|
+
sortKey = _useTable.sortKey,
|
|
51
|
+
sortDirection = _useTable.sortDirection;
|
|
52
|
+
|
|
53
|
+
var _useSelection = (0, _selectionProvider.useSelection)(),
|
|
54
|
+
_useSelection2 = (0, _slicedToArray2.default)(_useSelection, 2),
|
|
55
|
+
_state = _useSelection2[0],
|
|
56
|
+
_useSelection2$ = _useSelection2[1],
|
|
57
|
+
removeAll = _useSelection2$.removeAll,
|
|
58
|
+
setMax = _useSelection2$.setMax; // TODO this seems like something the user should control
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
(0, _react.useEffect)(function () {
|
|
62
|
+
if (removeAll) {
|
|
63
|
+
removeAll();
|
|
64
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
65
|
+
|
|
66
|
+
}, [rows]); // Set data length (via setMax) whenever data changes
|
|
67
|
+
|
|
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
|
+
};
|
|
81
|
+
|
|
82
|
+
return (0, _react2.jsx)(_useTableBody.TableBodyProvider, {
|
|
83
|
+
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) {
|
|
89
|
+
var idx = _ref2.idx,
|
|
90
|
+
row = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
|
|
91
|
+
return (0, _react2.jsx)(_useRowId.RowProvider, {
|
|
92
|
+
key: idx,
|
|
93
|
+
value: idx
|
|
94
|
+
}, // @ts-expect-error
|
|
95
|
+
children(row));
|
|
96
|
+
}) : _react.Children.map(children, function (row, idx) {
|
|
97
|
+
return (0, _react2.jsx)(_useRowId.RowProvider, {
|
|
98
|
+
key: idx,
|
|
99
|
+
value: idx
|
|
100
|
+
}, row);
|
|
101
|
+
})));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
var _default = TBody;
|
|
105
|
+
exports.default = _default;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("@emotion/react");
|
|
9
|
+
|
|
10
|
+
var _dsExplorations = require("@atlaskit/ds-explorations");
|
|
11
|
+
|
|
12
|
+
var _th = require("./ui/th");
|
|
13
|
+
|
|
14
|
+
/* eslint-disable no-unused-vars */
|
|
15
|
+
|
|
16
|
+
/** @jsx jsx */
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* __HeadCell__
|
|
20
|
+
*
|
|
21
|
+
* HeadCell element
|
|
22
|
+
*/
|
|
23
|
+
var Column = function Column(_ref) {
|
|
24
|
+
var children = _ref.children,
|
|
25
|
+
align = _ref.align,
|
|
26
|
+
testId = _ref.testId,
|
|
27
|
+
backgroundColor = _ref.backgroundColor,
|
|
28
|
+
_ref$scope = _ref.scope,
|
|
29
|
+
scope = _ref$scope === void 0 ? 'col' : _ref$scope;
|
|
30
|
+
return (0, _react.jsx)(_th.TH, {
|
|
31
|
+
scope: scope,
|
|
32
|
+
align: align,
|
|
33
|
+
testId: testId,
|
|
34
|
+
backgroundColor: backgroundColor
|
|
35
|
+
}, (0, _react.jsx)(_dsExplorations.UNSAFE_Text, {
|
|
36
|
+
color: "color.text",
|
|
37
|
+
fontWeight: "500"
|
|
38
|
+
}, children));
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
var _default = Column;
|
|
42
|
+
exports.default = _default;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.useSelection = exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
|
|
14
|
+
var _useSelectable = _interopRequireDefault(require("./use-selectable"));
|
|
15
|
+
|
|
16
|
+
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
|
+
|
|
18
|
+
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
|
+
|
|
20
|
+
var SelectionContext = /*#__PURE__*/(0, _react.createContext)([{
|
|
21
|
+
checked: [],
|
|
22
|
+
allChecked: false,
|
|
23
|
+
anyChecked: false,
|
|
24
|
+
maxChecked: 0,
|
|
25
|
+
selectionStart: -1,
|
|
26
|
+
previousSelection: []
|
|
27
|
+
}, {}]);
|
|
28
|
+
/**
|
|
29
|
+
* __Selection provider__
|
|
30
|
+
*
|
|
31
|
+
* A selection provider injects selection specific state into the table.
|
|
32
|
+
*
|
|
33
|
+
* - [Examples](https://atlassian.design/components/{packageName}/examples)
|
|
34
|
+
* - [Code](https://atlassian.design/components/{packageName}/code)
|
|
35
|
+
* - [Usage](https://atlassian.design/components/{packageName}/usage)
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
var SelectionProvider = function SelectionProvider(_ref) {
|
|
39
|
+
var children = _ref.children;
|
|
40
|
+
var reducer = (0, _useSelectable.default)();
|
|
41
|
+
return /*#__PURE__*/_react.default.createElement(SelectionContext.Provider, {
|
|
42
|
+
value: reducer
|
|
43
|
+
}, children);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
var useSelection = function useSelection() {
|
|
47
|
+
return (0, _react.useContext)(SelectionContext);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
exports.useSelection = useSelection;
|
|
51
|
+
var _default = SelectionProvider;
|
|
52
|
+
exports.default = _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useRowId = exports.RowProvider = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var RowContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
var useRowId = function useRowId() {
|
|
16
|
+
return (0, _react.useContext)(RowContext);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* __Row provider__
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
exports.useRowId = useRowId;
|
|
25
|
+
var RowProvider = RowContext.Provider;
|
|
26
|
+
exports.RowProvider = RowProvider;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _react = require("react");
|
|
15
|
+
|
|
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 = {
|
|
21
|
+
checked: [],
|
|
22
|
+
allChecked: false,
|
|
23
|
+
anyChecked: false,
|
|
24
|
+
maxChecked: 0,
|
|
25
|
+
selectionStart: -1,
|
|
26
|
+
previousSelection: []
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
var arrayFromRange = function arrayFromRange(from, to) {
|
|
30
|
+
var startIdx = from;
|
|
31
|
+
var stopIdx = to;
|
|
32
|
+
var increment = 1;
|
|
33
|
+
|
|
34
|
+
if (from > to) {
|
|
35
|
+
startIdx = to;
|
|
36
|
+
stopIdx = from;
|
|
37
|
+
increment = 0;
|
|
38
|
+
} // Create an array with values between `from` and `to` - either ascending or descending
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
return Array.from({
|
|
42
|
+
length: stopIdx - startIdx
|
|
43
|
+
}, function (_, i) {
|
|
44
|
+
return startIdx + i + increment;
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
function reducer(_ref, action) {
|
|
49
|
+
var checked = _ref.checked,
|
|
50
|
+
anyChecked = _ref.anyChecked,
|
|
51
|
+
maxChecked = _ref.maxChecked,
|
|
52
|
+
selectionStart = _ref.selectionStart,
|
|
53
|
+
previousSelection = _ref.previousSelection;
|
|
54
|
+
|
|
55
|
+
switch (action.type) {
|
|
56
|
+
case 'toggle_selection':
|
|
57
|
+
{
|
|
58
|
+
var _action$value = action.value,
|
|
59
|
+
id = _action$value.id,
|
|
60
|
+
shiftHeld = _action$value.shiftHeld;
|
|
61
|
+
var updated = checked.slice();
|
|
62
|
+
var newSelectionStart = selectionStart;
|
|
63
|
+
var newPreviousSelection = previousSelection.slice();
|
|
64
|
+
|
|
65
|
+
if (shiftHeld) {
|
|
66
|
+
if (checked.length > 0) {
|
|
67
|
+
var newIds = arrayFromRange(selectionStart, id); // create an array of the new ids
|
|
68
|
+
// Uncheck ids from the previous selection.
|
|
69
|
+
// This is done to maintain consistency with Shift-select behaviour elsewhere (e.g. macOS)
|
|
70
|
+
// TODO: Code could be improved to only remove ids that are not included in the new range, avoiding needing to re-add them below
|
|
71
|
+
|
|
72
|
+
updated = updated.filter(function (id) {
|
|
73
|
+
return !previousSelection.includes(id);
|
|
74
|
+
});
|
|
75
|
+
newIds.forEach(function (id) {
|
|
76
|
+
return updated.indexOf(id) === -1 && updated.push(id);
|
|
77
|
+
} // If the new id is not already checked, check it
|
|
78
|
+
);
|
|
79
|
+
newPreviousSelection = newIds; // Maintain an array of the previous selection to allow for consistent Shift-select behaviour
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
var checkedIndex = checked.indexOf(id); // is index already checked
|
|
83
|
+
|
|
84
|
+
if (checkedIndex !== -1) {
|
|
85
|
+
updated.splice(checkedIndex, 1); // if index is already checked, uncheck
|
|
86
|
+
} else {
|
|
87
|
+
updated.push(id); // if index is not checked, check
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
newSelectionStart = id; // Reset selection start id to this non-shift-selected id
|
|
91
|
+
|
|
92
|
+
newPreviousSelection = []; // Reset previous selection as it is no longer relevant once a new non-shift-selected id is added
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
var _anyChecked = updated.length > 0;
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
checked: updated,
|
|
99
|
+
allChecked: updated.length === maxChecked,
|
|
100
|
+
anyChecked: _anyChecked || Boolean(updated[id]),
|
|
101
|
+
maxChecked: maxChecked,
|
|
102
|
+
selectionStart: newSelectionStart,
|
|
103
|
+
previousSelection: newPreviousSelection
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
case 'set_root':
|
|
108
|
+
return {
|
|
109
|
+
checked: action.value ? Array.from(Array(maxChecked).keys()) : [],
|
|
110
|
+
allChecked: action.value,
|
|
111
|
+
anyChecked: Boolean(action.value),
|
|
112
|
+
maxChecked: maxChecked,
|
|
113
|
+
selectionStart: selectionStart,
|
|
114
|
+
previousSelection: previousSelection
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
case 'set_max':
|
|
118
|
+
{
|
|
119
|
+
var max = action.value;
|
|
120
|
+
return {
|
|
121
|
+
maxChecked: max,
|
|
122
|
+
allChecked: checked.length === max,
|
|
123
|
+
anyChecked: anyChecked,
|
|
124
|
+
checked: checked,
|
|
125
|
+
selectionStart: selectionStart,
|
|
126
|
+
previousSelection: previousSelection
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
default:
|
|
131
|
+
throw new Error();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
var initialiseState = function initialiseState() {
|
|
136
|
+
return _objectSpread(_objectSpread({}, defaultState), {}, {
|
|
137
|
+
checked: []
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
function useSelectable() {
|
|
142
|
+
var _useReducer = (0, _react.useReducer)(reducer, initialiseState()),
|
|
143
|
+
_useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
|
|
144
|
+
state = _useReducer2[0],
|
|
145
|
+
dispatch = _useReducer2[1];
|
|
146
|
+
|
|
147
|
+
var toggleSelection = (0, _react.useCallback)(function (id, shiftHeld) {
|
|
148
|
+
dispatch({
|
|
149
|
+
type: 'toggle_selection',
|
|
150
|
+
value: {
|
|
151
|
+
id: id,
|
|
152
|
+
shiftHeld: shiftHeld
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}, []);
|
|
156
|
+
var setAll = (0, _react.useCallback)(function () {
|
|
157
|
+
dispatch({
|
|
158
|
+
type: 'set_root',
|
|
159
|
+
value: true
|
|
160
|
+
});
|
|
161
|
+
}, []);
|
|
162
|
+
var removeAll = (0, _react.useCallback)(function () {
|
|
163
|
+
dispatch({
|
|
164
|
+
type: 'set_root',
|
|
165
|
+
value: false
|
|
166
|
+
});
|
|
167
|
+
}, []);
|
|
168
|
+
var setMax = (0, _react.useCallback)(function (max) {
|
|
169
|
+
dispatch({
|
|
170
|
+
type: 'set_max',
|
|
171
|
+
value: max
|
|
172
|
+
});
|
|
173
|
+
}, []);
|
|
174
|
+
return [state, {
|
|
175
|
+
setAll: setAll,
|
|
176
|
+
removeAll: removeAll,
|
|
177
|
+
toggleSelection: toggleSelection,
|
|
178
|
+
setMax: setMax
|
|
179
|
+
}];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
var _default = useSelectable;
|
|
183
|
+
exports.default = _default;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useSorting = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _react = require("react");
|
|
13
|
+
|
|
14
|
+
var useSorting = function useSorting(sortKey) {
|
|
15
|
+
var _useState = (0, _react.useState)(sortKey),
|
|
16
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
17
|
+
localSortKey = _useState2[0],
|
|
18
|
+
setLocalSortKey = _useState2[1];
|
|
19
|
+
|
|
20
|
+
var _useState3 = (0, _react.useState)(),
|
|
21
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
22
|
+
localSortDirection = _useState4[0],
|
|
23
|
+
setLocalSortDirection = _useState4[1];
|
|
24
|
+
|
|
25
|
+
var toggleSortDirection = (0, _react.useCallback)(function () {
|
|
26
|
+
setLocalSortDirection(function (oldLocalSortDirection) {
|
|
27
|
+
switch (oldLocalSortDirection) {
|
|
28
|
+
case undefined:
|
|
29
|
+
return 'ascending';
|
|
30
|
+
|
|
31
|
+
case 'ascending':
|
|
32
|
+
return 'descending';
|
|
33
|
+
|
|
34
|
+
case 'descending':
|
|
35
|
+
return 'ascending';
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}, []);
|
|
39
|
+
var setSortState = (0, _react.useCallback)(function (key) {
|
|
40
|
+
setLocalSortKey(function (localSortKey) {
|
|
41
|
+
if (key !== localSortKey) {
|
|
42
|
+
// sorting by different column
|
|
43
|
+
setLocalSortDirection('ascending');
|
|
44
|
+
return key;
|
|
45
|
+
} else {
|
|
46
|
+
toggleSortDirection();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return localSortKey;
|
|
50
|
+
});
|
|
51
|
+
}, [toggleSortDirection]);
|
|
52
|
+
return {
|
|
53
|
+
sortKey: localSortKey,
|
|
54
|
+
sortDirection: localSortDirection,
|
|
55
|
+
setSortState: setSortState
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
exports.useSorting = useSorting;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useTableBody = exports.TableBodyProvider = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
|
|
12
|
+
var _tinyInvariant = _interopRequireDefault(require("tiny-invariant"));
|
|
13
|
+
|
|
14
|
+
var TableBodyContext = /*#__PURE__*/(0, _react.createContext)(false);
|
|
15
|
+
/**
|
|
16
|
+
* __Table body provider__
|
|
17
|
+
* Ensures correct nesting of table elements.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
var TableBodyProvider = TableBodyContext.Provider;
|
|
21
|
+
exports.TableBodyProvider = TableBodyProvider;
|
|
22
|
+
|
|
23
|
+
var useTableBody = function useTableBody() {
|
|
24
|
+
var hasTableBody = (0, _react.useContext)(TableBodyContext);
|
|
25
|
+
(0, _tinyInvariant.default)(hasTableBody, '<Row /> must be nested inside a <TableBody>');
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.useTableBody = useTableBody;
|