UNPKG

7.91 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = void 0;
9var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13var _FileOutlined = _interopRequireDefault(require("@ant-design/icons/FileOutlined"));
14var _FolderOpenOutlined = _interopRequireDefault(require("@ant-design/icons/FolderOpenOutlined"));
15var _FolderOutlined = _interopRequireDefault(require("@ant-design/icons/FolderOutlined"));
16var _classnames = _interopRequireDefault(require("classnames"));
17var _util = require("rc-tree/lib/util");
18var _treeUtil = require("rc-tree/lib/utils/treeUtil");
19var React = _interopRequireWildcard(require("react"));
20var _configProvider = require("../config-provider");
21var _Tree = _interopRequireDefault(require("./Tree"));
22var _dictUtil = require("./utils/dictUtil");
23var __rest = void 0 && (void 0).__rest || function (s, e) {
24 var t = {};
25 for (var p in s) {
26 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
27 }
28 if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
29 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
30 }
31 return t;
32};
33function getIcon(props) {
34 var isLeaf = props.isLeaf,
35 expanded = props.expanded;
36 if (isLeaf) {
37 return /*#__PURE__*/React.createElement(_FileOutlined["default"], null);
38 }
39 return expanded ? /*#__PURE__*/React.createElement(_FolderOpenOutlined["default"], null) : /*#__PURE__*/React.createElement(_FolderOutlined["default"], null);
40}
41function getTreeData(_ref) {
42 var treeData = _ref.treeData,
43 children = _ref.children;
44 return treeData || (0, _treeUtil.convertTreeToData)(children);
45}
46var DirectoryTree = function DirectoryTree(_a, ref) {
47 var defaultExpandAll = _a.defaultExpandAll,
48 defaultExpandParent = _a.defaultExpandParent,
49 defaultExpandedKeys = _a.defaultExpandedKeys,
50 props = __rest(_a, ["defaultExpandAll", "defaultExpandParent", "defaultExpandedKeys"]);
51 // Shift click usage
52 var lastSelectedKey = React.useRef();
53 var cachedSelectedKeys = React.useRef();
54 var getInitExpandedKeys = function getInitExpandedKeys() {
55 var _convertDataToEntitie = (0, _treeUtil.convertDataToEntities)(getTreeData(props)),
56 keyEntities = _convertDataToEntitie.keyEntities;
57 var initExpandedKeys;
58 // Expanded keys
59 if (defaultExpandAll) {
60 initExpandedKeys = Object.keys(keyEntities);
61 } else if (defaultExpandParent) {
62 initExpandedKeys = (0, _util.conductExpandParent)(props.expandedKeys || defaultExpandedKeys || [], keyEntities);
63 } else {
64 initExpandedKeys = props.expandedKeys || defaultExpandedKeys;
65 }
66 return initExpandedKeys;
67 };
68 var _React$useState = React.useState(props.selectedKeys || props.defaultSelectedKeys || []),
69 _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
70 selectedKeys = _React$useState2[0],
71 setSelectedKeys = _React$useState2[1];
72 var _React$useState3 = React.useState(function () {
73 return getInitExpandedKeys();
74 }),
75 _React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
76 expandedKeys = _React$useState4[0],
77 setExpandedKeys = _React$useState4[1];
78 React.useEffect(function () {
79 if ('selectedKeys' in props) {
80 setSelectedKeys(props.selectedKeys);
81 }
82 }, [props.selectedKeys]);
83 React.useEffect(function () {
84 if ('expandedKeys' in props) {
85 setExpandedKeys(props.expandedKeys);
86 }
87 }, [props.expandedKeys]);
88 var onExpand = function onExpand(keys, info) {
89 var _a;
90 if (!('expandedKeys' in props)) {
91 setExpandedKeys(keys);
92 }
93 // Call origin function
94 return (_a = props.onExpand) === null || _a === void 0 ? void 0 : _a.call(props, keys, info);
95 };
96 var onSelect = function onSelect(keys, event) {
97 var _a;
98 var multiple = props.multiple;
99 var node = event.node,
100 nativeEvent = event.nativeEvent;
101 var _node$key = node.key,
102 key = _node$key === void 0 ? '' : _node$key;
103 var treeData = getTreeData(props);
104 // const newState: DirectoryTreeState = {};
105 // We need wrap this event since some value is not same
106 var newEvent = (0, _extends2["default"])((0, _extends2["default"])({}, event), {
107 selected: true
108 });
109 // Windows / Mac single pick
110 var ctrlPick = (nativeEvent === null || nativeEvent === void 0 ? void 0 : nativeEvent.ctrlKey) || (nativeEvent === null || nativeEvent === void 0 ? void 0 : nativeEvent.metaKey);
111 var shiftPick = nativeEvent === null || nativeEvent === void 0 ? void 0 : nativeEvent.shiftKey;
112 // Generate new selected keys
113 var newSelectedKeys;
114 if (multiple && ctrlPick) {
115 // Control click
116 newSelectedKeys = keys;
117 lastSelectedKey.current = key;
118 cachedSelectedKeys.current = newSelectedKeys;
119 newEvent.selectedNodes = (0, _dictUtil.convertDirectoryKeysToNodes)(treeData, newSelectedKeys);
120 } else if (multiple && shiftPick) {
121 // Shift click
122 newSelectedKeys = Array.from(new Set([].concat((0, _toConsumableArray2["default"])(cachedSelectedKeys.current || []), (0, _toConsumableArray2["default"])((0, _dictUtil.calcRangeKeys)({
123 treeData: treeData,
124 expandedKeys: expandedKeys,
125 startKey: key,
126 endKey: lastSelectedKey.current
127 })))));
128 newEvent.selectedNodes = (0, _dictUtil.convertDirectoryKeysToNodes)(treeData, newSelectedKeys);
129 } else {
130 // Single click
131 newSelectedKeys = [key];
132 lastSelectedKey.current = key;
133 cachedSelectedKeys.current = newSelectedKeys;
134 newEvent.selectedNodes = (0, _dictUtil.convertDirectoryKeysToNodes)(treeData, newSelectedKeys);
135 }
136 (_a = props.onSelect) === null || _a === void 0 ? void 0 : _a.call(props, newSelectedKeys, newEvent);
137 if (!('selectedKeys' in props)) {
138 setSelectedKeys(newSelectedKeys);
139 }
140 };
141 var _React$useContext = React.useContext(_configProvider.ConfigContext),
142 getPrefixCls = _React$useContext.getPrefixCls,
143 direction = _React$useContext.direction;
144 var customizePrefixCls = props.prefixCls,
145 className = props.className,
146 _props$showIcon = props.showIcon,
147 showIcon = _props$showIcon === void 0 ? true : _props$showIcon,
148 _props$expandAction = props.expandAction,
149 expandAction = _props$expandAction === void 0 ? 'click' : _props$expandAction,
150 otherProps = __rest(props, ["prefixCls", "className", "showIcon", "expandAction"]);
151 var prefixCls = getPrefixCls('tree', customizePrefixCls);
152 var connectClassName = (0, _classnames["default"])(prefixCls + "-directory", (0, _defineProperty2["default"])({}, prefixCls + "-directory-rtl", direction === 'rtl'), className);
153 return /*#__PURE__*/React.createElement(_Tree["default"], (0, _extends2["default"])({
154 icon: getIcon,
155 ref: ref,
156 blockNode: true
157 }, otherProps, {
158 showIcon: showIcon,
159 expandAction: expandAction,
160 prefixCls: prefixCls,
161 className: connectClassName,
162 expandedKeys: expandedKeys,
163 selectedKeys: selectedKeys,
164 onSelect: onSelect,
165 onExpand: onExpand
166 }));
167};
168var ForwardDirectoryTree = /*#__PURE__*/React.forwardRef(DirectoryTree);
169if (process.env.NODE_ENV !== 'production') {
170 ForwardDirectoryTree.displayName = 'DirectoryTree';
171}
172var _default = ForwardDirectoryTree;
173exports["default"] = _default;
\No newline at end of file