OptionList.js 10 KB

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