Skip to content

Commit 79848c2

Browse files
committed
chore: clean up code
1 parent e0198bd commit 79848c2

File tree

2 files changed

+154
-149
lines changed

2 files changed

+154
-149
lines changed

src/NodeList.tsx

Lines changed: 7 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44

55
import * as React from 'react';
66
import VirtualList from 'rc-virtual-list';
7-
import KeyCode from 'rc-util/lib/KeyCode';
87
import { FlattenNode, Key, DataEntity, DataNode } from './interface';
98
import MotionTreeNode from './MotionTreeNode';
10-
import { TreeContext } from './contextTypes';
119
import { findExpandedKeys, getExpandRange } from './utils/diffUtil';
12-
import { getTreeNodeProps, getKey, convertNodePropsToEventData } from './utils/treeUtil';
10+
import { getTreeNodeProps, getKey } from './utils/treeUtil';
1311

1412
const HIDDEN_STYLE = {
1513
width: 0,
@@ -55,7 +53,7 @@ interface NodeListProps {
5553
data: FlattenNode[];
5654
motion: any;
5755
focusable?: boolean;
58-
activeKey?: Key;
56+
activeItem: FlattenNode;
5957
focused?: boolean;
6058
tabIndex: number;
6159
checkable?: boolean;
@@ -143,7 +141,7 @@ const NodeList: React.FC<NodeListProps> = props => {
143141
itemHeight,
144142

145143
focusable,
146-
activeKey,
144+
activeItem,
147145
focused,
148146
tabIndex,
149147

@@ -240,120 +238,13 @@ const NodeList: React.FC<NodeListProps> = props => {
240238
};
241239

242240
// =========================== Accessibility ==========================
243-
function setActiveKey(key: Key) {
244-
onActiveChange(key);
245-
}
246-
247-
const activeItem = data.find(({ data: { key } }) => key === activeKey);
248-
249-
const changeActive = (offset: number) => {
250-
let index = data.findIndex(({ data: { key } }) => key === activeKey);
251-
252-
// Align with index
253-
if (index === -1 && offset < 0) {
254-
index = data.length;
255-
}
256-
257-
index = (index + offset + data.length) % data.length;
258-
259-
const item = data[index];
260-
if (item) {
261-
setActiveKey(item.data.key);
262-
} else {
263-
setActiveKey(null);
264-
}
265-
};
266-
267241
// Clean up `activeKey` if blur
268242
React.useEffect(() => {
269243
if (!focused) {
270-
setActiveKey(null);
244+
onActiveChange(null);
271245
}
272246
}, [focused]);
273247

274-
// ============================= Keyboard =============================
275-
const { onNodeExpand, onNodeCheck, onNodeSelect } = React.useContext(TreeContext);
276-
277-
const onInternalKeyDown: React.KeyboardEventHandler<HTMLDivElement> = event => {
278-
// >>>>>>>>>> Direction
279-
switch (event.which) {
280-
case KeyCode.UP: {
281-
changeActive(-1);
282-
event.preventDefault();
283-
break;
284-
}
285-
case KeyCode.DOWN: {
286-
changeActive(1);
287-
event.preventDefault();
288-
break;
289-
}
290-
}
291-
292-
if (activeItem && activeItem.data) {
293-
// >>>>>>>>>> Expand & Selection
294-
const expandable =
295-
activeItem.data.isLeaf === false || !!(activeItem.data.children || []).length;
296-
const eventNode = convertNodePropsToEventData({
297-
...getTreeNodeProps(activeKey, treeNodeRequiredProps),
298-
data: activeItem.data,
299-
active: true,
300-
});
301-
302-
switch (event.which) {
303-
// >>> Expand
304-
case KeyCode.LEFT: {
305-
// Collapse if possible
306-
if (expandable && expandedKeys.includes(activeKey)) {
307-
onNodeExpand({} as React.MouseEvent<HTMLDivElement>, eventNode);
308-
} else if (activeItem.parent) {
309-
setActiveKey(activeItem.parent.data.key);
310-
}
311-
event.preventDefault();
312-
break;
313-
}
314-
case KeyCode.RIGHT: {
315-
// Expand if possible
316-
if (expandable && !expandedKeys.includes(activeKey)) {
317-
onNodeExpand({} as React.MouseEvent<HTMLDivElement>, eventNode);
318-
} else if (activeItem.children && activeItem.children.length) {
319-
setActiveKey(activeItem.children[0].data.key);
320-
}
321-
event.preventDefault();
322-
break;
323-
}
324-
325-
// Selection
326-
case KeyCode.ENTER:
327-
case KeyCode.SPACE: {
328-
if (
329-
checkable &&
330-
!eventNode.disabled &&
331-
eventNode.checkable !== false &&
332-
!eventNode.disableCheckbox
333-
) {
334-
onNodeCheck(
335-
{} as React.MouseEvent<HTMLDivElement>,
336-
eventNode,
337-
!checkedKeys.includes(activeKey),
338-
);
339-
} else if (
340-
!checkable &&
341-
selectable &&
342-
!eventNode.disabled &&
343-
eventNode.selectable !== false
344-
) {
345-
onNodeSelect({} as React.MouseEvent<HTMLDivElement>, eventNode);
346-
}
347-
break;
348-
}
349-
}
350-
}
351-
352-
if (onKeyDown) {
353-
onKeyDown(event);
354-
}
355-
};
356-
357248
return (
358249
<>
359250
{focused && activeItem && (
@@ -367,7 +258,7 @@ const NodeList: React.FC<NodeListProps> = props => {
367258
style={HIDDEN_STYLE}
368259
disabled={focusable === false || disabled}
369260
tabIndex={focusable !== false ? tabIndex : null}
370-
onKeyDown={onInternalKeyDown}
261+
onKeyDown={onKeyDown}
371262
onFocus={onFocus}
372263
onBlur={onBlur}
373264
value=""
@@ -401,7 +292,7 @@ const NodeList: React.FC<NodeListProps> = props => {
401292
<MotionTreeNode
402293
{...restProps}
403294
{...treeNodeProps}
404-
active={activeKey !== null && key === activeKey}
295+
active={activeItem && key === activeItem.data.key}
405296
pos={pos}
406297
data={treeNode.data}
407298
isStart={isStart}
@@ -412,7 +303,7 @@ const NodeList: React.FC<NodeListProps> = props => {
412303
onMotionEnd={onMotionEnd}
413304
treeNodeRequiredProps={treeNodeRequiredProps}
414305
onMouseMove={() => {
415-
setActiveKey(null);
306+
onActiveChange(null);
416307
}}
417308
/>
418309
);

0 commit comments

Comments
 (0)