carbon-react 87.2.0 → 87.3.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.
@@ -11,11 +11,13 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
- const FlatTableBody = ({
14
+ const FlatTableBody = /*#__PURE__*/_react.default.forwardRef(({
15
15
  children
16
- }) => {
17
- return /*#__PURE__*/_react.default.createElement("tbody", null, children);
18
- };
16
+ }, ref) => {
17
+ return /*#__PURE__*/_react.default.createElement("tbody", {
18
+ ref: ref
19
+ }, children);
20
+ });
19
21
 
20
22
  FlatTableBody.propTypes = {
21
23
  /** Array of FlatTableRow. */
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactDnd = require("react-dnd");
11
+
12
+ var _reactDndHtml5Backend = _interopRequireDefault(require("react-dnd-html5-backend"));
13
+
14
+ var _propTypes = _interopRequireDefault(require("prop-types"));
15
+
16
+ var _icon = _interopRequireDefault(require("../../icon/icon.style"));
17
+
18
+ var _flatTableBody = _interopRequireDefault(require("../flat-table-body/flat-table-body.component"));
19
+
20
+ var _flatTableCell = _interopRequireDefault(require("../flat-table-cell/flat-table-cell.component"));
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+
24
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
25
+
26
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
27
+
28
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
29
+
30
+ const DropTarget = ({
31
+ children,
32
+ getOrder,
33
+ ...rest
34
+ }) => {
35
+ const [, drop] = (0, _reactDnd.useDrop)({
36
+ accept: "flatTableRow",
37
+
38
+ drop() {
39
+ getOrder();
40
+ }
41
+
42
+ });
43
+ return /*#__PURE__*/_react.default.createElement(_flatTableBody.default, _extends({
44
+ ref: drop
45
+ }, rest), children);
46
+ };
47
+
48
+ const FlatTableBodyDraggable = ({
49
+ children,
50
+ getOrder
51
+ }) => {
52
+ const [draggableItems, setDraggableItems] = (0, _react.useState)(_react.default.Children.toArray(children));
53
+ const isFirstRender = (0, _react.useRef)(true);
54
+ (0, _react.useEffect)(() => {
55
+ if (!isFirstRender.current) {
56
+ setDraggableItems(_react.default.Children.toArray(children));
57
+ } else {
58
+ isFirstRender.current = false;
59
+ }
60
+ }, [children]);
61
+
62
+ const findItem = id => {
63
+ const draggableItem = draggableItems.filter(item => `${item.props.id}` === id)[0];
64
+ return {
65
+ draggableItem,
66
+ index: draggableItems.indexOf(draggableItem)
67
+ };
68
+ };
69
+
70
+ const moveItem = (id, atIndex) => {
71
+ const {
72
+ draggableItem,
73
+ index
74
+ } = findItem(id);
75
+ const copyOfDraggableItems = [...draggableItems];
76
+ copyOfDraggableItems.splice(index, 1);
77
+ copyOfDraggableItems.splice(atIndex, 0, draggableItem);
78
+ setDraggableItems(copyOfDraggableItems);
79
+ };
80
+
81
+ const getItemsId = () => {
82
+ if (!getOrder) {
83
+ return;
84
+ }
85
+
86
+ const draggableItemIds = draggableItems.map(draggableItem => draggableItem.props.id);
87
+ getOrder(draggableItemIds);
88
+ };
89
+
90
+ return /*#__PURE__*/_react.default.createElement(_reactDnd.DndProvider, {
91
+ backend: _reactDndHtml5Backend.default
92
+ }, /*#__PURE__*/_react.default.createElement(DropTarget, {
93
+ getOrder: getItemsId
94
+ }, draggableItems.map(item => /*#__PURE__*/_react.default.cloneElement(item, {
95
+ id: `${item.props.id}`,
96
+ moveItem,
97
+ findItem,
98
+ draggable: true
99
+ }, [/*#__PURE__*/_react.default.createElement(_flatTableCell.default, {
100
+ key: item.props.id
101
+ }, /*#__PURE__*/_react.default.createElement(_icon.default, {
102
+ type: "drag"
103
+ })), item.props.children]))));
104
+ };
105
+
106
+ FlatTableBodyDraggable.propTypes = {
107
+ getOrder: _propTypes.default.func,
108
+ children: _propTypes.default.node.isRequired
109
+ };
110
+ DropTarget.propTypes = {
111
+ children: _propTypes.default.node.isRequired,
112
+ getOrder: _propTypes.default.func
113
+ };
114
+ var _default = FlatTableBodyDraggable;
115
+ exports.default = _default;
@@ -0,0 +1,12 @@
1
+ import * as React from "react";
2
+
3
+ export interface FlatTableBodyDraggableProps {
4
+ /** Array of FlatTableRow. */
5
+ children: React.ReactNode;
6
+ /** Callback fired when order is changed */
7
+ getOrder?: (draggableItemIds: number[]) => void;
8
+ }
9
+
10
+ declare function FlatTableBodyDraggable(props: FlatTableBodyDraggableProps): JSX.Element;
11
+
12
+ export default FlatTableBodyDraggable;
@@ -0,0 +1,2 @@
1
+ export { default } from "./flat-table-body-draggable";
2
+ export * from "./flat-table-body-draggable";
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _flatTableBodyDraggable.default;
10
+ }
11
+ });
12
+
13
+ var _flatTableBodyDraggable = _interopRequireDefault(require("./flat-table-body-draggable.component"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactDnd = require("react-dnd");
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ const FlatTableRowDraggable = ({
17
+ children,
18
+ id,
19
+ findItem,
20
+ moveItem
21
+ }) => {
22
+ const originalIndex = findItem(id).index;
23
+ const [{
24
+ isDragging
25
+ }, drag] = (0, _reactDnd.useDrag)({
26
+ item: {
27
+ type: "flatTableRow",
28
+ id,
29
+ originalIndex
30
+ },
31
+ collect: monitor => ({
32
+ isDragging: monitor.isDragging()
33
+ }),
34
+ end: (dropResult, monitor) => {
35
+ const {
36
+ id: droppedId,
37
+ originalIndex: oIndex
38
+ } = monitor.getItem();
39
+ const didDrop = monitor.didDrop();
40
+
41
+ if (!didDrop) {
42
+ moveItem(droppedId, oIndex);
43
+ }
44
+ }
45
+ });
46
+ const [, drop] = (0, _reactDnd.useDrop)({
47
+ accept: "flatTableRow",
48
+ canDrop: () => false,
49
+
50
+ hover({
51
+ id: draggedId
52
+ }) {
53
+ if (draggedId !== id) {
54
+ const {
55
+ index: overIndex
56
+ } = findItem(id);
57
+ moveItem(draggedId, overIndex);
58
+ }
59
+ }
60
+
61
+ });
62
+ return /*#__PURE__*/_react.default.cloneElement(children, {
63
+ id,
64
+ isDragging,
65
+ ref: node => drag(drop(node))
66
+ });
67
+ };
68
+
69
+ FlatTableRowDraggable.propTypes = {
70
+ /** Array of FlatTableHeader or FlatTableCell. FlatTableRowHeader could also be passed. */
71
+ children: _propTypes.default.node.isRequired,
72
+
73
+ /** ID for use in drag and drop functionality */
74
+ id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
75
+
76
+ /** function to find an item in the list of draggable items */
77
+ findItem: _propTypes.default.func.isRequired,
78
+
79
+ /** function to reposition an item in the list of draggable items */
80
+ moveItem: _propTypes.default.func.isRequired,
81
+
82
+ /** item is draggable */
83
+ draggable: _propTypes.default.bool
84
+ };
85
+ var _default = FlatTableRowDraggable;
86
+ exports.default = _default;
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+
3
+ export interface FlatTableRowDraggableProps {
4
+ /** Array of FlatTableRow. */
5
+ children: React.ReactNode;
6
+ /** ID for use in drag and drop functionality */
7
+ id?: number | string;
8
+ /** function to find an item in the list of draggable items */
9
+ findItem: () => object;
10
+ /** function to reposition an item in the list of draggable items */
11
+ moveItem: () => void;
12
+ /** item is draggable */
13
+ draggable?: boolean;
14
+ }
15
+
16
+ declare function FlatTableRowDraggable(props: FlatTableRowDraggableProps): JSX.Element;
17
+
18
+ export default FlatTableRowDraggable;
@@ -19,6 +19,8 @@ var _flatTableCheckbox = _interopRequireDefault(require("../flat-table-checkbox"
19
19
 
20
20
  var _flatTableRowHeader = _interopRequireDefault(require("../flat-table-row-header"));
21
21
 
22
+ var _flatTableRowDraggable = _interopRequireDefault(require("./__internal__/flat-table-row-draggable.component"));
23
+
22
24
  var _flatTable = require("../flat-table.component");
23
25
 
24
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -44,7 +46,11 @@ const FlatTableRow = /*#__PURE__*/_react.default.forwardRef(({
44
46
  bgColor,
45
47
  horizontalBorderColor,
46
48
  horizontalBorderSize = "small",
47
- applyBorderLeft
49
+ applyBorderLeft,
50
+ id,
51
+ draggable,
52
+ findItem,
53
+ moveItem
48
54
  }, ref) => {
49
55
  const [isExpanded, setIsExpanded] = (0, _react.useState)(expanded);
50
56
  const rowRef = ref || (0, _react.useRef)();
@@ -123,9 +129,8 @@ const FlatTableRow = /*#__PURE__*/_react.default.forwardRef(({
123
129
  (0, _react.useEffect)(() => {
124
130
  setIsExpanded(expanded);
125
131
  }, [expanded]);
126
- return /*#__PURE__*/_react.default.createElement(_drawer.DrawerSidebarContext.Consumer, null, ({
127
- isInSidebar
128
- }) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_flatTableRow.default, _extends({
132
+
133
+ const rowComponent = isInSidebar => /*#__PURE__*/_react.default.createElement(_flatTableRow.default, _extends({
129
134
  isInSidebar: isInSidebar,
130
135
  expandable: expandable,
131
136
  isSubRow: isSubRow,
@@ -143,7 +148,8 @@ const FlatTableRow = /*#__PURE__*/_react.default.forwardRef(({
143
148
  bgColor: bgColor,
144
149
  horizontalBorderColor: horizontalBorderColor,
145
150
  horizontalBorderSize: horizontalBorderSize,
146
- applyBorderLeft: applyBorderLeft
151
+ applyBorderLeft: applyBorderLeft,
152
+ draggable: draggable
147
153
  }, interactiveRowProps), _react.default.Children.map(children, (child, index) => {
148
154
  return child && /*#__PURE__*/_react.default.cloneElement(child, {
149
155
  expandable: expandable && index === firstCellIndex(),
@@ -154,7 +160,17 @@ const FlatTableRow = /*#__PURE__*/_react.default.forwardRef(({
154
160
  leftPosition: leftPositions[index],
155
161
  ...child.props
156
162
  });
157
- })), isExpanded && subRows && _react.default.Children.map(subRows, (child, index) => child && /*#__PURE__*/_react.default.cloneElement(child, {
163
+ }));
164
+
165
+ const draggableComponent = isInSidebar => /*#__PURE__*/_react.default.createElement(_flatTableRowDraggable.default, {
166
+ id: id,
167
+ moveItem: moveItem,
168
+ findItem: findItem
169
+ }, rowComponent(isInSidebar));
170
+
171
+ return /*#__PURE__*/_react.default.createElement(_drawer.DrawerSidebarContext.Consumer, null, ({
172
+ isInSidebar
173
+ }) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, draggable ? draggableComponent(isInSidebar) : rowComponent(isInSidebar), isExpanded && subRows && _react.default.Children.map(subRows, (child, index) => child && /*#__PURE__*/_react.default.cloneElement(child, {
158
174
  isSubRow: true,
159
175
  isFirstSubRow: index === 0,
160
176
  ...child.props
@@ -205,7 +221,28 @@ FlatTableRow.propTypes = {
205
221
  stickyOffset: _propTypes.default.number,
206
222
 
207
223
  /** @ignore @private applies a border-left to the first child */
208
- applyBorderLeft: _propTypes.default.bool
224
+ applyBorderLeft: _propTypes.default.bool,
225
+
226
+ /** ID for use in drag and drop functionality
227
+ * @private
228
+ * @ignore
229
+ */
230
+ id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
231
+
232
+ /**
233
+ * @private
234
+ * @ignore
235
+ */
236
+ findItem: _propTypes.default.func,
237
+
238
+ /**
239
+ * @private
240
+ * @ignore
241
+ */
242
+ moveItem: _propTypes.default.func,
243
+
244
+ /** @ignore @private position in header if multiple rows */
245
+ draggable: _propTypes.default.bool
209
246
  };
210
247
  var _default = FlatTableRow;
211
248
  exports.default = _default;
@@ -92,7 +92,9 @@ const StyledFlatTableRow = _styledComponents.default.tr`
92
92
  isFirstSubRow,
93
93
  size,
94
94
  theme,
95
- applyBorderLeft
95
+ applyBorderLeft,
96
+ isDragging,
97
+ draggable
96
98
  }) => {
97
99
  const backgroundColor = bgColor ? (0, _color.toColor)(theme, bgColor) : undefined;
98
100
  const customBorderColor = horizontalBorderColor ? (0, _color.toColor)(theme, horizontalBorderColor) : undefined;
@@ -123,6 +125,9 @@ const StyledFlatTableRow = _styledComponents.default.tr`
123
125
 
124
126
  ${_flatTableHeader.default} {
125
127
  border-bottom: 1px solid ${borderColor(colorTheme, theme)};
128
+ :first-child {
129
+ border-left: 1px solid ${borderColor(colorTheme, theme)};
130
+ }
126
131
  }
127
132
 
128
133
  ${stickyOffset > 0 && (0, _styledComponents.css)`
@@ -255,6 +260,21 @@ const StyledFlatTableRow = _styledComponents.default.tr`
255
260
  }
256
261
  `}
257
262
 
263
+ ${isDragging && (0, _styledComponents.css)`
264
+ border: ${isInSidebar ? theme.palette.slateTint(40) : theme.palette.slateTint(55)}
265
+ 2px solid;
266
+ cursor: grabbing;
267
+ ${allCellTypes} {
268
+ background-color: ${isInSidebar ? theme.palette.slateTint(60) : theme.palette.slateTint(75)};
269
+ }
270
+ `}
271
+
272
+ ${draggable && (0, _styledComponents.css)`
273
+ ${_icon.default}:first-of-type {
274
+ font-size: 16px;
275
+ }
276
+ `}
277
+
258
278
  ${isFirstSubRow && (0, _styledComponents.css)`
259
279
  ${allCellTypes} {
260
280
  box-shadow: inset 0 6px 4px -4px ${theme.flatTable.subRow.shadow};
@@ -5,6 +5,7 @@ export { default as FlatTable } from "./flat-table";
5
5
  export { default as FlatTableHead } from "./flat-table-head";
6
6
  export { default as FlatTableHeader } from "./flat-table-header";
7
7
  export { default as FlatTableBody } from "./flat-table-body";
8
+ export { default as FlatTableBodyDraggable } from "./flat-table-body-draggable";
8
9
  export { default as FlatTableRow } from "./flat-table-row";
9
10
  export { default as FlatTableRowHeader } from "./flat-table-row-header";
10
11
  export { default as FlatTableCell } from "./flat-table-cell";
@@ -14,6 +15,7 @@ export * from "./flat-table";
14
15
  export * from "./flat-table-head";
15
16
  export * from "./flat-table-header";
16
17
  export * from "./flat-table-body";
18
+ export * from "./flat-table-body-draggable";
17
19
  export * from "./flat-table-row";
18
20
  export * from "./flat-table-row-header";
19
21
  export * from "./flat-table-cell";
@@ -51,6 +51,12 @@ Object.defineProperty(exports, "FlatTableCheckbox", {
51
51
  return _flatTableCheckbox.default;
52
52
  }
53
53
  });
54
+ Object.defineProperty(exports, "FlatTableBodyDraggable", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _flatTableBodyDraggable.default;
58
+ }
59
+ });
54
60
  Object.defineProperty(exports, "Sort", {
55
61
  enumerable: true,
56
62
  get: function () {
@@ -74,6 +80,8 @@ var _flatTableCell = _interopRequireDefault(require("./flat-table-cell/flat-tabl
74
80
 
75
81
  var _flatTableCheckbox = _interopRequireDefault(require("./flat-table-checkbox/flat-table-checkbox.component"));
76
82
 
83
+ var _flatTableBodyDraggable = _interopRequireDefault(require("./flat-table-body-draggable/flat-table-body-draggable.component"));
84
+
77
85
  var _sort = _interopRequireDefault(require("./sort/sort.component"));
78
86
 
79
87
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "87.2.0",
3
+ "version": "87.3.0",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "engineStrict": true,
6
6
  "engines": {