UNPKG

9.96 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9
10var _vue = require("vue");
11
12var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
13
14var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
16var _useMemo = _interopRequireDefault(require("../_util/hooks/useMemo"));
17
18var _KeyCode = _interopRequireDefault(require("../_util/KeyCode"));
19
20var _Tree = _interopRequireDefault(require("../vc-tree/Tree"));
21
22var _valueUtil = require("./utils/valueUtil");
23
24var _vcSelect = require("../vc-select");
25
26var _LegacyContext = _interopRequireDefault(require("./LegacyContext"));
27
28var _TreeSelectContext = _interopRequireDefault(require("./TreeSelectContext"));
29
30var HIDDEN_STYLE = {
31 width: 0,
32 height: 0,
33 display: 'flex',
34 overflow: 'hidden',
35 opacity: 0,
36 border: 0,
37 padding: 0,
38 margin: 0
39};
40
41var _default = (0, _vue.defineComponent)({
42 name: 'OptionList',
43 inheritAttrs: false,
44 slots: ['notFoundContent', 'menuItemSelectedIcon'],
45 setup: function setup(_, _ref) {
46 var slots = _ref.slots,
47 expose = _ref.expose;
48 var baseProps = (0, _vcSelect.useBaseProps)();
49 var legacyContext = (0, _LegacyContext.default)();
50 var context = (0, _TreeSelectContext.default)();
51 var treeRef = (0, _vue.ref)();
52 var memoTreeData = (0, _useMemo.default)(function () {
53 return context.treeData;
54 }, [function () {
55 return baseProps.open;
56 }, function () {
57 return context.treeData;
58 }], function (next) {
59 return next[0];
60 });
61 var mergedCheckedKeys = (0, _vue.computed)(function () {
62 var checkable = legacyContext.checkable,
63 halfCheckedKeys = legacyContext.halfCheckedKeys,
64 checkedKeys = legacyContext.checkedKeys;
65
66 if (!checkable) {
67 return null;
68 }
69
70 return {
71 checked: checkedKeys,
72 halfChecked: halfCheckedKeys
73 };
74 });
75 (0, _vue.watch)(function () {
76 return baseProps.open;
77 }, function () {
78 (0, _vue.nextTick)(function () {
79 var _a;
80
81 if (baseProps.open && !baseProps.multiple && legacyContext.checkedKeys.length) {
82 (_a = treeRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo({
83 key: legacyContext.checkedKeys[0]
84 });
85 }
86 });
87 }, {
88 immediate: true,
89 flush: 'post'
90 }); // ========================== Search ==========================
91
92 var lowerSearchValue = (0, _vue.computed)(function () {
93 return String(baseProps.searchValue).toLowerCase();
94 });
95
96 var filterTreeNode = function filterTreeNode(treeNode) {
97 if (!lowerSearchValue.value) {
98 return false;
99 }
100
101 return String(treeNode[legacyContext.treeNodeFilterProp]).toLowerCase().includes(lowerSearchValue.value);
102 }; // =========================== Keys ===========================
103
104
105 var expandedKeys = (0, _vue.shallowRef)(legacyContext.treeDefaultExpandedKeys);
106 var searchExpandedKeys = (0, _vue.shallowRef)(null);
107 (0, _vue.watch)(function () {
108 return baseProps.searchValue;
109 }, function () {
110 if (baseProps.searchValue) {
111 searchExpandedKeys.value = (0, _valueUtil.getAllKeys)((0, _vue.toRaw)(context.treeData), (0, _vue.toRaw)(context.fieldNames));
112 }
113 }, {
114 immediate: true
115 });
116 var mergedExpandedKeys = (0, _vue.computed)(function () {
117 if (legacyContext.treeExpandedKeys) {
118 return legacyContext.treeExpandedKeys.slice();
119 }
120
121 return baseProps.searchValue ? searchExpandedKeys.value : expandedKeys.value;
122 });
123
124 var onInternalExpand = function onInternalExpand(keys) {
125 var _a;
126
127 expandedKeys.value = keys;
128 searchExpandedKeys.value = keys;
129 (_a = legacyContext.onTreeExpand) === null || _a === void 0 ? void 0 : _a.call(legacyContext, keys);
130 }; // ========================== Events ==========================
131
132
133 var onListMouseDown = function onListMouseDown(event) {
134 event.preventDefault();
135 };
136
137 var onInternalSelect = function onInternalSelect(_, _ref2) {
138 var node = _ref2.node;
139
140 var _a, _b;
141
142 var checkable = legacyContext.checkable,
143 checkedKeys = legacyContext.checkedKeys;
144
145 if (checkable && (0, _valueUtil.isCheckDisabled)(node)) {
146 return;
147 }
148
149 (_a = context.onSelect) === null || _a === void 0 ? void 0 : _a.call(context, node.key, {
150 selected: !checkedKeys.includes(node.key)
151 });
152
153 if (!baseProps.multiple) {
154 (_b = baseProps.toggleOpen) === null || _b === void 0 ? void 0 : _b.call(baseProps, false);
155 }
156 }; // ========================= Keyboard =========================
157
158
159 var activeKey = (0, _vue.ref)(null);
160 var activeEntity = (0, _vue.computed)(function () {
161 return legacyContext.keyEntities[activeKey.value];
162 });
163
164 var setActiveKey = function setActiveKey(key) {
165 activeKey.value = key;
166 };
167
168 expose({
169 scrollTo: function scrollTo() {
170 var _b2;
171
172 var _a, _b;
173
174 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
175 args[_key] = arguments[_key];
176 }
177
178 return (_b = (_a = treeRef.value) === null || _a === void 0 ? void 0 : _a.scrollTo) === null || _b === void 0 ? void 0 : (_b2 = _b).call.apply(_b2, [_a].concat(args));
179 },
180 onKeydown: function onKeydown(event) {
181 var _a;
182
183 var which = event.which;
184
185 switch (which) {
186 // >>> Arrow keys
187 case _KeyCode.default.UP:
188 case _KeyCode.default.DOWN:
189 case _KeyCode.default.LEFT:
190 case _KeyCode.default.RIGHT:
191 (_a = treeRef.value) === null || _a === void 0 ? void 0 : _a.onKeydown(event);
192 break;
193 // >>> Select item
194
195 case _KeyCode.default.ENTER:
196 {
197 if (activeEntity.value) {
198 var _ref3 = activeEntity.value.node || {},
199 selectable = _ref3.selectable,
200 value = _ref3.value;
201
202 if (selectable !== false) {
203 onInternalSelect(null, {
204 node: {
205 key: activeKey.value
206 },
207 selected: !legacyContext.checkedKeys.includes(value)
208 });
209 }
210 }
211
212 break;
213 }
214 // >>> Close
215
216 case _KeyCode.default.ESC:
217 {
218 baseProps.toggleOpen(false);
219 }
220 }
221 },
222 onKeyup: function onKeyup() {}
223 });
224 return function () {
225 var _a;
226
227 var prefixCls = baseProps.prefixCls,
228 multiple = baseProps.multiple,
229 searchValue = baseProps.searchValue,
230 open = baseProps.open,
231 _baseProps$notFoundCo = baseProps.notFoundContent,
232 notFoundContent = _baseProps$notFoundCo === void 0 ? (_a = slots.notFoundContent) === null || _a === void 0 ? void 0 : _a.call(slots) : _baseProps$notFoundCo;
233 var listHeight = context.listHeight,
234 listItemHeight = context.listItemHeight,
235 virtual = context.virtual;
236 var checkable = legacyContext.checkable,
237 treeDefaultExpandAll = legacyContext.treeDefaultExpandAll,
238 treeIcon = legacyContext.treeIcon,
239 showTreeIcon = legacyContext.showTreeIcon,
240 switcherIcon = legacyContext.switcherIcon,
241 treeLine = legacyContext.treeLine,
242 loadData = legacyContext.loadData,
243 treeLoadedKeys = legacyContext.treeLoadedKeys,
244 treeMotion = legacyContext.treeMotion,
245 onTreeLoad = legacyContext.onTreeLoad,
246 checkedKeys = legacyContext.checkedKeys; // ========================== Render ==========================
247
248 if (memoTreeData.value.length === 0) {
249 return (0, _vue.createVNode)("div", {
250 "role": "listbox",
251 "class": "".concat(prefixCls, "-empty"),
252 "onMousedown": onListMouseDown
253 }, [notFoundContent]);
254 }
255
256 var treeProps = {
257 fieldNames: context.fieldNames
258 };
259
260 if (treeLoadedKeys) {
261 treeProps.loadedKeys = treeLoadedKeys;
262 }
263
264 if (mergedExpandedKeys.value) {
265 treeProps.expandedKeys = mergedExpandedKeys.value;
266 }
267
268 return (0, _vue.createVNode)("div", {
269 "onMousedown": onListMouseDown
270 }, [activeEntity.value && open && (0, _vue.createVNode)("span", {
271 "style": HIDDEN_STYLE,
272 "aria-live": "assertive"
273 }, [activeEntity.value.node.value]), (0, _vue.createVNode)(_Tree.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({
274 "ref": treeRef,
275 "focusable": false,
276 "prefixCls": "".concat(prefixCls, "-tree"),
277 "treeData": memoTreeData.value,
278 "height": listHeight,
279 "itemHeight": listItemHeight,
280 "virtual": virtual,
281 "multiple": multiple,
282 "icon": treeIcon,
283 "showIcon": showTreeIcon,
284 "switcherIcon": switcherIcon,
285 "showLine": treeLine,
286 "loadData": searchValue ? null : loadData,
287 "motion": treeMotion,
288 "activeKey": activeKey.value,
289 "checkable": checkable,
290 "checkStrictly": true,
291 "checkedKeys": mergedCheckedKeys.value,
292 "selectedKeys": !checkable ? checkedKeys : [],
293 "defaultExpandAll": treeDefaultExpandAll
294 }, treeProps), {}, {
295 "onActiveChange": setActiveKey,
296 "onSelect": onInternalSelect,
297 "onCheck": onInternalSelect,
298 "onExpand": onInternalExpand,
299 "onLoad": onTreeLoad,
300 "filterTreeNode": filterTreeNode
301 }), (0, _extends2.default)((0, _extends2.default)({}, slots), {
302 checkable: legacyContext.customSlots.treeCheckable
303 }))]);
304 };
305 }
306});
307
308exports.default = _default;
\No newline at end of file