@pingux/astro 2.39.0 → 2.40.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/TreeView/InsertionIndicator.js +50 -0
- package/lib/cjs/components/TreeView/TreeView.js +227 -34
- package/lib/cjs/components/TreeView/TreeView.stories.js +3 -2
- package/lib/cjs/components/TreeView/TreeView.styles.js +26 -6
- package/lib/cjs/components/TreeView/TreeView.test.js +258 -8
- package/lib/cjs/components/TreeView/TreeViewItem.js +28 -56
- package/lib/cjs/components/TreeView/TreeViewKeyboardDelegate.test.js +19 -0
- package/lib/cjs/components/TreeView/TreeViewRow.js +123 -32
- package/lib/cjs/components/TreeView/TreeViewSection.js +33 -67
- package/lib/cjs/utils/testUtils/dndMocks.js +232 -0
- package/lib/components/TreeView/InsertionIndicator.js +41 -0
- package/lib/components/TreeView/TreeView.js +224 -34
- package/lib/components/TreeView/TreeView.stories.js +3 -2
- package/lib/components/TreeView/TreeView.styles.js +26 -6
- package/lib/components/TreeView/TreeView.test.js +262 -7
- package/lib/components/TreeView/TreeViewItem.js +29 -57
- package/lib/components/TreeView/TreeViewKeyboardDelegate.test.js +19 -0
- package/lib/components/TreeView/TreeViewRow.js +129 -38
- package/lib/components/TreeView/TreeViewSection.js +34 -68
- package/lib/utils/testUtils/dndMocks.js +218 -0
- package/package.json +4 -1
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports["default"] = void 0;
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
11
|
+
var _dnd = require("@react-aria/dnd");
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
13
|
+
var _ = require("../..");
|
14
|
+
var _hooks = require("../../hooks");
|
15
|
+
var _react2 = require("@emotion/react");
|
16
|
+
var InsertionIndicator = function InsertionIndicator(props) {
|
17
|
+
var insertRef = _react["default"].useRef(null);
|
18
|
+
var target = props.target,
|
19
|
+
state = props.dropState;
|
20
|
+
var _useDropIndicator = (0, _dnd.useDropIndicator)({
|
21
|
+
target: target,
|
22
|
+
isPresentationOnly: true
|
23
|
+
}, state, {
|
24
|
+
ref: insertRef
|
25
|
+
}),
|
26
|
+
dropIndicatorProps = _useDropIndicator.dropIndicatorProps,
|
27
|
+
isHidden = _useDropIndicator.isHidden,
|
28
|
+
isDropTarget = _useDropIndicator.isDropTarget;
|
29
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)('', {
|
30
|
+
isDropTarget: isDropTarget
|
31
|
+
}),
|
32
|
+
classNames = _useStatusClasses.classNames;
|
33
|
+
if (isHidden) {
|
34
|
+
return null;
|
35
|
+
}
|
36
|
+
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
37
|
+
as: "li"
|
38
|
+
}, dropIndicatorProps, {
|
39
|
+
role: "option",
|
40
|
+
ref: insertRef,
|
41
|
+
className: classNames,
|
42
|
+
variant: "treeView.insertionIndicator"
|
43
|
+
}));
|
44
|
+
};
|
45
|
+
InsertionIndicator.propTypes = {
|
46
|
+
dropState: _propTypes["default"].shape({}),
|
47
|
+
target: _propTypes["default"].shape({})
|
48
|
+
};
|
49
|
+
var _default = InsertionIndicator;
|
50
|
+
exports["default"] = _default;
|
@@ -14,31 +14,41 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
14
14
|
_Object$defineProperty(exports, "__esModule", {
|
15
15
|
value: true
|
16
16
|
});
|
17
|
-
exports["default"] = exports.SectionOrItemRender = void 0;
|
17
|
+
exports.insertItemToPosition = exports.insertItem = exports.dropItem = exports["default"] = exports.SectionOrItemRender = void 0;
|
18
18
|
exports.useTreeViewLayout = useTreeViewLayout;
|
19
19
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
20
|
+
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
20
21
|
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
|
22
|
+
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
23
|
+
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
|
24
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/keys"));
|
21
25
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
22
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
23
26
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
27
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
24
28
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
25
29
|
var _react = _interopRequireWildcard(require("react"));
|
26
|
-
var
|
30
|
+
var _reactAria = require("react-aria");
|
31
|
+
var _dnd = require("@react-aria/dnd");
|
32
|
+
var _focus = require("@react-aria/focus");
|
27
33
|
var _i18n = require("@react-aria/i18n");
|
28
34
|
var _listbox = require("@react-aria/listbox");
|
35
|
+
var _dnd2 = require("@react-stately/dnd");
|
29
36
|
var _layout = require("@react-stately/layout");
|
37
|
+
var _tree = require("@react-stately/tree");
|
30
38
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
31
39
|
var _TreeViewContext = require("../../context/TreeViewContext");
|
32
40
|
var _index = require("../../index");
|
33
41
|
var _isIterable = require("../../utils/devUtils/props/isIterable");
|
34
42
|
var _TreeViewWrapper = _interopRequireDefault(require("./TreeViewWrapper"));
|
35
43
|
var _react2 = require("@emotion/react");
|
36
|
-
var _excluded = ["
|
44
|
+
var _excluded = ["value"],
|
45
|
+
_excluded2 = ["value"],
|
46
|
+
_excluded3 = ["tree", "disabledKeys", "onExpandedChange", "onDragStart", "onDrop", "onKeyDown", "pageLength"]; // split out and exported for ease of use across components
|
37
47
|
// and to facilitate easier testing (eliminates redundant conditional renders)
|
38
48
|
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); }
|
39
49
|
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; }
|
40
50
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
41
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var
|
51
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context6, _context7; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context6 = ownKeys(Object(source), !0)).call(_context6, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context7 = ownKeys(Object(source))).call(_context7, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
42
52
|
var SectionOrItemRender = function SectionOrItemRender(condition, SectionComponent, ItemComponent) {
|
43
53
|
if (condition) {
|
44
54
|
return SectionComponent;
|
@@ -58,23 +68,81 @@ function useTreeViewLayout(state) {
|
|
58
68
|
layout.disabledKeys = state.disabledKeys;
|
59
69
|
return layout;
|
60
70
|
}
|
71
|
+
|
72
|
+
// if you are placing the dragged item into another item.
|
73
|
+
var insertItem = function insertItem(tree, eventTarget, keyBeingDragged, state) {
|
74
|
+
tree.move(keyBeingDragged, eventTarget.key, 0);
|
75
|
+
// expand target, if target is closed
|
76
|
+
if (!state.expandedKeys.has(eventTarget.key)) {
|
77
|
+
state.toggleKey(eventTarget.key);
|
78
|
+
}
|
79
|
+
};
|
80
|
+
exports.insertItem = insertItem;
|
81
|
+
var insertItemToPosition = function insertItemToPosition(tree, dropPosition, targetKey, droppedItem) {
|
82
|
+
// remove item
|
83
|
+
tree.remove(droppedItem.key);
|
84
|
+
|
85
|
+
// removing value and then spreading it into the top level.
|
86
|
+
// this prevents nesting ie value.value.value.... etc.
|
87
|
+
var value = droppedItem.value,
|
88
|
+
rest = (0, _objectWithoutProperties2["default"])(droppedItem, _excluded);
|
89
|
+
var buildNewItemArray = function buildNewItemArray(arr) {
|
90
|
+
return (0, _map["default"])(arr).call(arr, function (_item) {
|
91
|
+
var _itemValue = _item.value,
|
92
|
+
_itemRest = (0, _objectWithoutProperties2["default"])(_item, _excluded2);
|
93
|
+
return _objectSpread(_objectSpread({}, _itemValue), {}, {
|
94
|
+
_itemRest: _itemRest
|
95
|
+
});
|
96
|
+
});
|
97
|
+
};
|
98
|
+
if (dropPosition === 'before') {
|
99
|
+
tree.insertBefore(targetKey, _objectSpread(_objectSpread(_objectSpread({}, rest), droppedItem.value), droppedItem.children !== undefined && {
|
100
|
+
items: buildNewItemArray(droppedItem.children)
|
101
|
+
}));
|
102
|
+
} else if (dropPosition === 'after') {
|
103
|
+
tree.insertAfter(targetKey, _objectSpread(_objectSpread(_objectSpread({}, rest), droppedItem.value), droppedItem.children !== undefined && {
|
104
|
+
items: buildNewItemArray(droppedItem.children)
|
105
|
+
}));
|
106
|
+
}
|
107
|
+
};
|
108
|
+
|
109
|
+
// split out so that it can be exported and unit tested.
|
110
|
+
exports.insertItemToPosition = insertItemToPosition;
|
111
|
+
var dropItem = function dropItem(eventTarget, tree, state, droppedItem) {
|
112
|
+
// if dropPosition = 'on', just insert as first child, and then open, if closed
|
113
|
+
if (eventTarget.dropPosition === 'on') {
|
114
|
+
insertItem(tree, eventTarget, droppedItem.key, state);
|
115
|
+
} else {
|
116
|
+
insertItemToPosition(tree, eventTarget.dropPosition, eventTarget.key, droppedItem);
|
117
|
+
}
|
118
|
+
};
|
119
|
+
exports.dropItem = dropItem;
|
61
120
|
var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
62
|
-
var _tree$items$,
|
121
|
+
var _tree$items$, _context5;
|
63
122
|
var tree = props.tree,
|
64
123
|
disabledKeys = props.disabledKeys,
|
65
124
|
onExpandedChange = props.onExpandedChange,
|
125
|
+
onDragStartProp = props.onDragStart,
|
126
|
+
onDropProp = props.onDrop,
|
66
127
|
onKeyDown = props.onKeyDown,
|
67
128
|
_props$pageLength = props.pageLength,
|
68
129
|
pageLength = _props$pageLength === void 0 ? 5 : _props$pageLength,
|
69
|
-
others = (0, _objectWithoutProperties2["default"])(props,
|
70
|
-
|
130
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded3);
|
131
|
+
var _useState = (0, _react.useState)(''),
|
132
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
133
|
+
keyBeingDragged = _useState2[0],
|
134
|
+
setKeyBeingDragged = _useState2[1];
|
135
|
+
var _useState3 = (0, _react.useState)(''),
|
136
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
137
|
+
targetKey = _useState4[0],
|
138
|
+
setTargetKey = _useState4[1];
|
71
139
|
// we are tracking the last focused item.
|
72
140
|
// this enables us to have focus jump back to the item, after focus
|
73
141
|
// leaves the tree, and then returns.
|
74
|
-
var
|
75
|
-
|
76
|
-
lastFocusedItem =
|
77
|
-
setLastFocusedItem =
|
142
|
+
var _useState5 = (0, _react.useState)(tree === null || tree === void 0 || (_tree$items$ = tree.items[0]) === null || _tree$items$ === void 0 ? void 0 : _tree$items$.key),
|
143
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
144
|
+
lastFocusedItem = _useState6[0],
|
145
|
+
setLastFocusedItem = _useState6[1];
|
78
146
|
var level = 0;
|
79
147
|
var treeViewRef = (0, _react.useRef)();
|
80
148
|
var selectedKeys = tree.selectedKeys;
|
@@ -83,7 +151,7 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
83
151
|
(0, _react.useImperativeHandle)(ref, function () {
|
84
152
|
return treeViewRef.current;
|
85
153
|
});
|
86
|
-
var state = (0,
|
154
|
+
var state = (0, _tree.useTreeState)(_objectSpread({
|
87
155
|
onExpandedChange: onExpandedChange,
|
88
156
|
disabledKeys: disabledKeys,
|
89
157
|
selectedKeys: selectedKeys,
|
@@ -93,14 +161,14 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
93
161
|
var flattenNestedData = function flattenNestedData(_data) {
|
94
162
|
var returnArray = [];
|
95
163
|
var checkItemNesting = function checkItemNesting(item) {
|
96
|
-
var _item$value, _item$
|
97
|
-
if (((_item$value = item.value) === null || _item$value === void 0 || (_item$value = _item$value.
|
164
|
+
var _item$value, _item$children;
|
165
|
+
if (((_item$value = item.value) === null || _item$value === void 0 || (_item$value = _item$value.children) === null || _item$value === void 0 ? void 0 : _item$value.length) > 0) {
|
98
166
|
return {
|
99
167
|
isTopLevel: true,
|
100
168
|
hasChildren: true
|
101
169
|
};
|
102
170
|
}
|
103
|
-
if (((_item$
|
171
|
+
if (((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) > 0) {
|
104
172
|
return {
|
105
173
|
isTopLevel: false,
|
106
174
|
hasChildren: true
|
@@ -112,12 +180,32 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
112
180
|
};
|
113
181
|
};
|
114
182
|
var checkSection = function checkSection(isRendered, hasItems) {
|
115
|
-
|
183
|
+
if (isRendered === true && hasItems) {
|
184
|
+
return true;
|
185
|
+
}
|
186
|
+
return false;
|
187
|
+
};
|
188
|
+
var buildParentKeys = function buildParentKeys(parentKey, parentKeys) {
|
189
|
+
var _context;
|
190
|
+
var keyArr = [];
|
191
|
+
if (parentKey) {
|
192
|
+
keyArr.push(parentKey);
|
193
|
+
}
|
194
|
+
return (0, _concat["default"])(_context = []).call(_context, keyArr, parentKeys);
|
116
195
|
};
|
117
|
-
|
196
|
+
|
197
|
+
// data is the array being looped through
|
198
|
+
// parentKey is the immediate parent of the item
|
199
|
+
// parenKeys is the key of all the nesting levels, all the way to the root
|
200
|
+
var loop = function loop(data, parentKey, parentKeys) {
|
118
201
|
for (var i = 0; i < data.length; i += 1) {
|
202
|
+
var _data$i$value;
|
119
203
|
var obj = {
|
120
|
-
key: data[i].key
|
204
|
+
key: data[i].key,
|
205
|
+
title: data[i].key,
|
206
|
+
items: ((_data$i$value = data[i].value) === null || _data$i$value === void 0 ? void 0 : _data$i$value.children) || data[i].children || null,
|
207
|
+
parentKey: parentKey,
|
208
|
+
parentKeys: buildParentKeys(parentKey, parentKeys)
|
121
209
|
};
|
122
210
|
returnArray.push(obj);
|
123
211
|
var _checkItemNesting = checkItemNesting(data[i]),
|
@@ -125,32 +213,64 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
125
213
|
isTopLevel = _checkItemNesting.isTopLevel;
|
126
214
|
if (checkSection(state.expandedKeys.has(data[i].key), hasChildren) === true) {
|
127
215
|
if (isTopLevel) {
|
128
|
-
var _data$i$
|
129
|
-
loop((_data$i$
|
216
|
+
var _data$i$value2;
|
217
|
+
loop((_data$i$value2 = data[i].value) === null || _data$i$value2 === void 0 ? void 0 : _data$i$value2.children, data[i].key, buildParentKeys(parentKey, parentKeys));
|
130
218
|
} else {
|
131
|
-
|
219
|
+
var _context2;
|
220
|
+
/* istanbul ignore next */
|
221
|
+
loop(data[i].children, data[i].key, (0, _concat["default"])(_context2 = [parentKey]).call(_context2, parentKeys && parentKeys));
|
132
222
|
}
|
133
223
|
}
|
134
224
|
}
|
135
225
|
};
|
136
|
-
loop(_data);
|
226
|
+
loop(_data, undefined, []);
|
137
227
|
return returnArray;
|
138
228
|
};
|
139
229
|
|
140
230
|
// list of value pairs of keys and refs
|
141
231
|
// does not need to be in order, because they are values pairs
|
142
|
-
var
|
143
|
-
|
144
|
-
refArray =
|
145
|
-
setRefs =
|
232
|
+
var _useState7 = (0, _react.useState)([]),
|
233
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
234
|
+
refArray = _useState8[0],
|
235
|
+
setRefs = _useState8[1];
|
146
236
|
|
147
237
|
// creates a flattened list of keys for up/down keyboard use
|
148
238
|
// this DOES need to be in the same order as the HTML appears in the DOM.
|
149
239
|
// we are essentially turning all rendered items into a flat list, for up/down
|
150
240
|
var flatKeyArray = (0, _react.useMemo)(function () {
|
151
|
-
return flattenNestedData(
|
152
|
-
}, [state.expandedKeys]);
|
241
|
+
return flattenNestedData((0, _from["default"])(state.collection));
|
242
|
+
}, [state.expandedKeys, state.collection]);
|
153
243
|
var ariaLabel = props['aria-label'];
|
244
|
+
var onItemDrop = function onItemDrop(e) {
|
245
|
+
var _context3, _context4;
|
246
|
+
var thisItem = tree.getItem(keyBeingDragged);
|
247
|
+
var foundDraggingItem = (0, _find["default"])(flatKeyArray).call(flatKeyArray, function (_item) {
|
248
|
+
return _item.key === keyBeingDragged;
|
249
|
+
});
|
250
|
+
var foundTargetItem = (0, _find["default"])(flatKeyArray).call(flatKeyArray, function (_item) {
|
251
|
+
return _item.key === e.target.key;
|
252
|
+
});
|
253
|
+
if ((0, _includes["default"])(_context3 = (0, _from["default"])(state.disabledKeys)).call(_context3, foundTargetItem.key) && e.target.dropPosition === 'on') {
|
254
|
+
setKeyBeingDragged('');
|
255
|
+
return;
|
256
|
+
}
|
257
|
+
|
258
|
+
// disallow an item from being dropped onto itself, or its children
|
259
|
+
if (e.target.key !== keyBeingDragged && !(0, _includes["default"])(_context4 = foundTargetItem.parentKeys).call(_context4, foundDraggingItem.key)) {
|
260
|
+
dropItem(e.target, tree, state, thisItem);
|
261
|
+
state.selectionManager.state.setFocusedKey(keyBeingDragged);
|
262
|
+
if (onDropProp) {
|
263
|
+
onDropProp(e);
|
264
|
+
}
|
265
|
+
}
|
266
|
+
setKeyBeingDragged('');
|
267
|
+
};
|
268
|
+
var dragItemStart = function dragItemStart(e) {
|
269
|
+
setKeyBeingDragged((0, _from["default"])((0, _keys["default"])(e))[0]);
|
270
|
+
if (onDragStartProp) {
|
271
|
+
onDragStartProp(e, (0, _keys["default"])(e)[0]);
|
272
|
+
}
|
273
|
+
};
|
154
274
|
var listBoxOptions = {
|
155
275
|
disabledKeys: disabledKeys,
|
156
276
|
'aria-label': ariaLabel
|
@@ -160,6 +280,67 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
160
280
|
keyboardDelegate: layout
|
161
281
|
}), state, treeViewRef),
|
162
282
|
listBoxProps = _useListBox.listBoxProps;
|
283
|
+
var dropState = (0, _dnd2.useDroppableCollectionState)(_objectSpread(_objectSpread({}, props), {}, {
|
284
|
+
onDrop: onItemDrop,
|
285
|
+
onDropEnter: function onDropEnter(e) {
|
286
|
+
return setTargetKey(e.target.key);
|
287
|
+
},
|
288
|
+
onDropExit: function onDropExit() {
|
289
|
+
return setTargetKey('');
|
290
|
+
},
|
291
|
+
collection: state.collection,
|
292
|
+
selectionManager: state.selectionManager
|
293
|
+
}));
|
294
|
+
var _useDroppableCollecti = (0, _dnd.useDroppableCollection)(_objectSpread(_objectSpread({}, props), {}, {
|
295
|
+
onDrop: onItemDrop,
|
296
|
+
disabledKeys: disabledKeys,
|
297
|
+
dropTargetDelegate: new _dnd.ListDropTargetDelegate(flatKeyArray, treeViewRef)
|
298
|
+
}), dropState, treeViewRef),
|
299
|
+
collectionProps = _useDroppableCollecti.collectionProps;
|
300
|
+
|
301
|
+
// Setup drag state for the collection.
|
302
|
+
var dragState = (0, _dnd2.useDraggableCollectionState)(_objectSpread(_objectSpread({}, props), {}, {
|
303
|
+
onDragStart: dragItemStart,
|
304
|
+
// Collection and selection manager come from list state.
|
305
|
+
collection: state.collection,
|
306
|
+
selectionManager: state.selectionManager,
|
307
|
+
// Provide data for each dragged item. This function could
|
308
|
+
getItems: function getItems() {
|
309
|
+
return (0, _map["default"])(flatKeyArray).call(flatKeyArray, function (_item) {
|
310
|
+
return {
|
311
|
+
'text/plain': _item.key
|
312
|
+
};
|
313
|
+
});
|
314
|
+
}
|
315
|
+
}));
|
316
|
+
(0, _react.useEffect)(function () {
|
317
|
+
if ((0, _find["default"])(refArray).call(refArray, function (item) {
|
318
|
+
return item.key === lastFocusedItem;
|
319
|
+
})) {
|
320
|
+
var _thisRef$current;
|
321
|
+
var _refArray$find = (0, _find["default"])(refArray).call(refArray, function (item) {
|
322
|
+
return item.key === lastFocusedItem;
|
323
|
+
}),
|
324
|
+
thisRef = _refArray$find.thisRef;
|
325
|
+
thisRef === null || thisRef === void 0 || (_thisRef$current = thisRef.current) === null || _thisRef$current === void 0 ? void 0 : _thisRef$current.focus();
|
326
|
+
}
|
327
|
+
}, [state.selectionManager.focusedKey]);
|
328
|
+
(0, _dnd.useDraggableCollection)(props, dragState, treeViewRef);
|
329
|
+
var _useFocusRing = (0, _focus.useFocusRing)({
|
330
|
+
within: true
|
331
|
+
}),
|
332
|
+
focusWithinProps = _useFocusRing.focusProps,
|
333
|
+
isFocusedWithin = _useFocusRing.isFocused;
|
334
|
+
(0, _react.useEffect)(function () {
|
335
|
+
if (isFocusedWithin) {
|
336
|
+
var _thisRef$current2;
|
337
|
+
var _refArray$find2 = (0, _find["default"])(refArray).call(refArray, function (item) {
|
338
|
+
return item.key === lastFocusedItem;
|
339
|
+
}),
|
340
|
+
thisRef = _refArray$find2.thisRef;
|
341
|
+
thisRef === null || thisRef === void 0 || (_thisRef$current2 = thisRef.current) === null || _thisRef$current2 === void 0 ? void 0 : _thisRef$current2.focus();
|
342
|
+
}
|
343
|
+
}, [isFocusedWithin]);
|
163
344
|
return (0, _react2.jsx)(_TreeViewContext.TreeViewContext.Provider, {
|
164
345
|
value: {
|
165
346
|
state: state,
|
@@ -167,11 +348,15 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
167
348
|
refArray: refArray,
|
168
349
|
setRefs: setRefs,
|
169
350
|
flatKeyArray: flatKeyArray,
|
351
|
+
dragState: dragState,
|
352
|
+
dropState: dropState,
|
170
353
|
pageLength: pageLength,
|
171
354
|
setLastFocusedItem: setLastFocusedItem,
|
172
|
-
lastFocusedItem: lastFocusedItem
|
355
|
+
lastFocusedItem: lastFocusedItem,
|
356
|
+
targetKey: targetKey,
|
357
|
+
keyBeingDragged: keyBeingDragged
|
173
358
|
}
|
174
|
-
}, (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({}, listBoxProps, {
|
359
|
+
}, (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({}, (0, _reactAria.mergeProps)(listBoxProps, collectionProps, focusWithinProps), focusWithinProps, {
|
175
360
|
ref: treeViewRef,
|
176
361
|
"aria-label": ariaLabel,
|
177
362
|
role: "treegrid",
|
@@ -180,10 +365,10 @@ var TreeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
180
365
|
p: '5px',
|
181
366
|
border: 'none !important'
|
182
367
|
}
|
183
|
-
}, others), (0, _react2.jsx)(_TreeViewWrapper["default"], null, (0, _map["default"])(
|
184
|
-
return SectionOrItemRender(item.
|
368
|
+
}, others), (0, _react2.jsx)(_TreeViewWrapper["default"], null, (0, _map["default"])(_context5 = (0, _from["default"])(state.collection)).call(_context5, function (item, index) {
|
369
|
+
return SectionOrItemRender(item.value.children.length > 0, (0, _react2.jsx)(_index.TreeViewSection, {
|
185
370
|
item: item,
|
186
|
-
items: item.
|
371
|
+
items: item.value.children,
|
187
372
|
title: item.props.title,
|
188
373
|
key: item.props.title,
|
189
374
|
onKeyDown: onKeyDown,
|
@@ -206,6 +391,10 @@ TreeView.propTypes = {
|
|
206
391
|
this is returned from the useTreeData hook in React-Aria */
|
207
392
|
tree: _propTypes["default"].shape({
|
208
393
|
selectedKeys: _isIterable.isIterableProp,
|
394
|
+
move: _propTypes["default"].func,
|
395
|
+
remove: _propTypes["default"].func,
|
396
|
+
insert: _propTypes["default"].func,
|
397
|
+
getItem: _propTypes["default"].func,
|
209
398
|
items: _isIterable.isIterableProp
|
210
399
|
}).isRequired,
|
211
400
|
/** The currently disabled keys in the collection. */
|
@@ -218,6 +407,10 @@ TreeView.propTypes = {
|
|
218
407
|
'aria-label': _propTypes["default"].string,
|
219
408
|
/** Handler that is called when a key is pressed. */
|
220
409
|
onKeyDown: _propTypes["default"].func,
|
410
|
+
/** Callback that is called when the dragging action starts. */
|
411
|
+
onDragStart: _propTypes["default"].func,
|
412
|
+
/** Callback that is called when the dropping action occurs. */
|
413
|
+
onDrop: _propTypes["default"].func,
|
221
414
|
/** Number of items to move the focus when page up or page down is pressed */
|
222
415
|
pageLength: _propTypes["default"].number
|
223
416
|
};
|
@@ -79,7 +79,7 @@ var Default = function Default(args) {
|
|
79
79
|
var tree = (0, _index.useTreeData)({
|
80
80
|
initialItems: data,
|
81
81
|
getKey: function getKey(item) {
|
82
|
-
return item.
|
82
|
+
return item.key;
|
83
83
|
},
|
84
84
|
getChildren: function getChildren(item) {
|
85
85
|
return item.items;
|
@@ -88,7 +88,8 @@ var Default = function Default(args) {
|
|
88
88
|
return (0, _react2.jsx)(_index.TreeView, (0, _extends2["default"])({}, args, {
|
89
89
|
items: tree.items,
|
90
90
|
tree: tree,
|
91
|
-
"aria-label": "Example Tree"
|
91
|
+
"aria-label": "Example Tree",
|
92
|
+
disabledKeys: ['Single Item']
|
92
93
|
}), function (section) {
|
93
94
|
var _section$value;
|
94
95
|
return (0, _react2.jsx)(_index.Item, {
|
@@ -10,7 +10,7 @@ var treeRow = {
|
|
10
10
|
cursor: 'pointer',
|
11
11
|
height: '31px',
|
12
12
|
outline: 'none',
|
13
|
-
'&.is-selected, &.is-hovered': {
|
13
|
+
'&.is-selected, &.is-hovered, &.is-drop-target': {
|
14
14
|
backgroundColor: 'active',
|
15
15
|
'& span': {
|
16
16
|
color: 'white'
|
@@ -22,9 +22,6 @@ var treeRow = {
|
|
22
22
|
fill: 'white'
|
23
23
|
}
|
24
24
|
},
|
25
|
-
'&.is-expanded': {
|
26
|
-
marginBottom: 'xs'
|
27
|
-
},
|
28
25
|
'& :focus': {
|
29
26
|
border: 'none'
|
30
27
|
}
|
@@ -33,7 +30,7 @@ var wrapper = {
|
|
33
30
|
'&.is-focused': {
|
34
31
|
boxSizing: 'unset',
|
35
32
|
outline: '1px solid',
|
36
|
-
outlineColor: '
|
33
|
+
outlineColor: 'blue',
|
37
34
|
outlineOffset: '2px'
|
38
35
|
},
|
39
36
|
width: '100%',
|
@@ -45,8 +42,31 @@ var wrapper = {
|
|
45
42
|
},
|
46
43
|
outline: 'none'
|
47
44
|
};
|
45
|
+
var rowWrapper = {
|
46
|
+
'&.is-focused': {
|
47
|
+
boxSizing: 'unset',
|
48
|
+
outline: '1px solid',
|
49
|
+
outlineColor: 'focus',
|
50
|
+
outlineOffset: '2px'
|
51
|
+
},
|
52
|
+
border: 'none',
|
53
|
+
':focus': {
|
54
|
+
border: 'none'
|
55
|
+
},
|
56
|
+
'&.is-expanded': {
|
57
|
+
marginBottom: 'xs'
|
58
|
+
},
|
59
|
+
outline: 'none'
|
60
|
+
};
|
61
|
+
var insertionIndicator = {
|
62
|
+
width: '100%',
|
63
|
+
outline: '1px solid',
|
64
|
+
outlineColor: 'active'
|
65
|
+
};
|
48
66
|
var _default = {
|
49
67
|
treeRow: treeRow,
|
50
|
-
|
68
|
+
rowWrapper: rowWrapper,
|
69
|
+
wrapper: wrapper,
|
70
|
+
insertionIndicator: insertionIndicator
|
51
71
|
};
|
52
72
|
exports["default"] = _default;
|