SubMenu.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props');
  6. var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
  7. var _typeof2 = require('babel-runtime/helpers/typeof');
  8. var _typeof3 = _interopRequireDefault(_typeof2);
  9. var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
  10. var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  11. var _extends3 = require('babel-runtime/helpers/extends');
  12. var _extends4 = _interopRequireDefault(_extends3);
  13. var _omit = require('omit.js');
  14. var _omit2 = _interopRequireDefault(_omit);
  15. var _vueTypes = require('../_util/vue-types');
  16. var _vueTypes2 = _interopRequireDefault(_vueTypes);
  17. var _vcTrigger = require('../vc-trigger');
  18. var _vcTrigger2 = _interopRequireDefault(_vcTrigger);
  19. var _KeyCode = require('../_util/KeyCode');
  20. var _KeyCode2 = _interopRequireDefault(_KeyCode);
  21. var _store = require('../_util/store');
  22. var _SubPopupMenu = require('./SubPopupMenu');
  23. var _SubPopupMenu2 = _interopRequireDefault(_SubPopupMenu);
  24. var _placements = require('./placements');
  25. var _placements2 = _interopRequireDefault(_placements);
  26. var _BaseMixin = require('../_util/BaseMixin');
  27. var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
  28. var _propsUtil = require('../_util/props-util');
  29. var _requestAnimationTimeout = require('../_util/requestAnimationTimeout');
  30. var _util = require('./util');
  31. var _getTransitionProps = require('../_util/getTransitionProps');
  32. var _getTransitionProps2 = _interopRequireDefault(_getTransitionProps);
  33. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  34. var guid = 0;
  35. var popupPlacementMap = {
  36. horizontal: 'bottomLeft',
  37. vertical: 'rightTop',
  38. 'vertical-left': 'rightTop',
  39. 'vertical-right': 'leftTop'
  40. };
  41. var updateDefaultActiveFirst = function updateDefaultActiveFirst(store, eventKey, defaultActiveFirst) {
  42. var menuId = (0, _util.getMenuIdFromSubMenuEventKey)(eventKey);
  43. var state = store.getState();
  44. store.setState({
  45. defaultActiveFirst: (0, _extends4['default'])({}, state.defaultActiveFirst, (0, _defineProperty3['default'])({}, menuId, defaultActiveFirst))
  46. });
  47. };
  48. var SubMenu = {
  49. name: 'SubMenu',
  50. props: {
  51. parentMenu: _vueTypes2['default'].object,
  52. title: _vueTypes2['default'].any,
  53. selectedKeys: _vueTypes2['default'].array.def([]),
  54. openKeys: _vueTypes2['default'].array.def([]),
  55. openChange: _vueTypes2['default'].func.def(_util.noop),
  56. rootPrefixCls: _vueTypes2['default'].string,
  57. eventKey: _vueTypes2['default'].oneOfType([_vueTypes2['default'].string, _vueTypes2['default'].number]),
  58. multiple: _vueTypes2['default'].bool,
  59. active: _vueTypes2['default'].bool, // TODO: remove
  60. isRootMenu: _vueTypes2['default'].bool.def(false),
  61. index: _vueTypes2['default'].number,
  62. triggerSubMenuAction: _vueTypes2['default'].string,
  63. popupClassName: _vueTypes2['default'].string,
  64. getPopupContainer: _vueTypes2['default'].func,
  65. forceSubMenuRender: _vueTypes2['default'].bool,
  66. openAnimation: _vueTypes2['default'].oneOfType([_vueTypes2['default'].string, _vueTypes2['default'].object]),
  67. disabled: _vueTypes2['default'].bool,
  68. subMenuOpenDelay: _vueTypes2['default'].number.def(0.1),
  69. subMenuCloseDelay: _vueTypes2['default'].number.def(0.1),
  70. level: _vueTypes2['default'].number.def(1),
  71. inlineIndent: _vueTypes2['default'].number.def(24),
  72. openTransitionName: _vueTypes2['default'].string,
  73. popupOffset: _vueTypes2['default'].array,
  74. isOpen: _vueTypes2['default'].bool,
  75. store: _vueTypes2['default'].object,
  76. mode: _vueTypes2['default'].oneOf(['horizontal', 'vertical', 'vertical-left', 'vertical-right', 'inline']).def('vertical'),
  77. manualRef: _vueTypes2['default'].func.def(_util.noop),
  78. builtinPlacements: _vueTypes2['default'].object.def(function () {
  79. return {};
  80. }),
  81. itemIcon: _vueTypes2['default'].any,
  82. expandIcon: _vueTypes2['default'].any,
  83. subMenuKey: _vueTypes2['default'].string
  84. },
  85. mixins: [_BaseMixin2['default']],
  86. isSubMenu: true,
  87. data: function data() {
  88. var props = this.$props;
  89. var store = props.store;
  90. var eventKey = props.eventKey;
  91. var defaultActiveFirst = store.getState().defaultActiveFirst;
  92. var value = false;
  93. if (defaultActiveFirst) {
  94. value = defaultActiveFirst[eventKey];
  95. }
  96. updateDefaultActiveFirst(store, eventKey, value);
  97. return {
  98. // defaultActiveFirst: false,
  99. };
  100. },
  101. mounted: function mounted() {
  102. var _this = this;
  103. this.$nextTick(function () {
  104. _this.handleUpdated();
  105. });
  106. },
  107. updated: function updated() {
  108. var _this2 = this;
  109. this.$nextTick(function () {
  110. _this2.handleUpdated();
  111. });
  112. },
  113. beforeDestroy: function beforeDestroy() {
  114. var eventKey = this.eventKey;
  115. this.__emit('destroy', eventKey);
  116. /* istanbul ignore if */
  117. if (this.minWidthTimeout) {
  118. (0, _requestAnimationTimeout.cancelAnimationTimeout)(this.minWidthTimeout);
  119. this.minWidthTimeout = null;
  120. }
  121. /* istanbul ignore if */
  122. if (this.mouseenterTimeout) {
  123. (0, _requestAnimationTimeout.cancelAnimationTimeout)(this.mouseenterTimeout);
  124. this.mouseenterTimeout = null;
  125. }
  126. },
  127. methods: {
  128. handleUpdated: function handleUpdated() {
  129. var _this3 = this;
  130. var _$props = this.$props,
  131. mode = _$props.mode,
  132. parentMenu = _$props.parentMenu,
  133. manualRef = _$props.manualRef;
  134. // invoke customized ref to expose component to mixin
  135. if (manualRef) {
  136. manualRef(this);
  137. }
  138. if (mode !== 'horizontal' || !parentMenu.isRootMenu || !this.isOpen) {
  139. return;
  140. }
  141. this.minWidthTimeout = (0, _requestAnimationTimeout.requestAnimationTimeout)(function () {
  142. return _this3.adjustWidth();
  143. }, 0);
  144. },
  145. onKeyDown: function onKeyDown(e) {
  146. var keyCode = e.keyCode;
  147. var menu = this.menuInstance;
  148. var _$props2 = this.$props,
  149. store = _$props2.store,
  150. isOpen = _$props2.isOpen;
  151. if (keyCode === _KeyCode2['default'].ENTER) {
  152. this.onTitleClick(e);
  153. updateDefaultActiveFirst(store, this.eventKey, true);
  154. return true;
  155. }
  156. if (keyCode === _KeyCode2['default'].RIGHT) {
  157. if (isOpen) {
  158. menu.onKeyDown(e);
  159. } else {
  160. this.triggerOpenChange(true);
  161. // need to update current menu's defaultActiveFirst value
  162. updateDefaultActiveFirst(store, this.eventKey, true);
  163. }
  164. return true;
  165. }
  166. if (keyCode === _KeyCode2['default'].LEFT) {
  167. var handled = void 0;
  168. if (isOpen) {
  169. handled = menu.onKeyDown(e);
  170. } else {
  171. return undefined;
  172. }
  173. if (!handled) {
  174. this.triggerOpenChange(false);
  175. handled = true;
  176. }
  177. return handled;
  178. }
  179. if (isOpen && (keyCode === _KeyCode2['default'].UP || keyCode === _KeyCode2['default'].DOWN)) {
  180. return menu.onKeyDown(e);
  181. }
  182. return undefined;
  183. },
  184. onPopupVisibleChange: function onPopupVisibleChange(visible) {
  185. this.triggerOpenChange(visible, visible ? 'mouseenter' : 'mouseleave');
  186. },
  187. onMouseEnter: function onMouseEnter(e) {
  188. var _$props3 = this.$props,
  189. key = _$props3.eventKey,
  190. store = _$props3.store;
  191. updateDefaultActiveFirst(store, key, false);
  192. this.__emit('mouseenter', {
  193. key: key,
  194. domEvent: e
  195. });
  196. },
  197. onMouseLeave: function onMouseLeave(e) {
  198. var eventKey = this.eventKey,
  199. parentMenu = this.parentMenu;
  200. parentMenu.subMenuInstance = this;
  201. // parentMenu.subMenuLeaveFn = () => {
  202. // // trigger mouseleave
  203. // this.__emit('mouseleave', {
  204. // key: eventKey,
  205. // domEvent: e,
  206. // })
  207. // }
  208. this.__emit('mouseleave', {
  209. key: eventKey,
  210. domEvent: e
  211. });
  212. // prevent popup menu and submenu gap
  213. // parentMenu.subMenuLeaveTimer = setTimeout(parentMenu.subMenuLeaveFn, 100)
  214. },
  215. onTitleMouseEnter: function onTitleMouseEnter(domEvent) {
  216. var key = this.$props.eventKey;
  217. // this.clearSubMenuTitleLeaveTimer()
  218. this.__emit('itemHover', {
  219. key: key,
  220. hover: true
  221. });
  222. this.__emit('titleMouseenter', {
  223. key: key,
  224. domEvent: domEvent
  225. });
  226. },
  227. onTitleMouseLeave: function onTitleMouseLeave(e) {
  228. var eventKey = this.eventKey,
  229. parentMenu = this.parentMenu;
  230. parentMenu.subMenuInstance = this;
  231. this.__emit('itemHover', {
  232. key: eventKey,
  233. hover: false
  234. });
  235. this.__emit('titleMouseleave', {
  236. key: eventKey,
  237. domEvent: e
  238. });
  239. },
  240. onTitleClick: function onTitleClick(e) {
  241. var _$props4 = this.$props,
  242. triggerSubMenuAction = _$props4.triggerSubMenuAction,
  243. eventKey = _$props4.eventKey,
  244. isOpen = _$props4.isOpen,
  245. store = _$props4.store;
  246. this.__emit('titleClick', {
  247. key: eventKey,
  248. domEvent: e
  249. });
  250. if (triggerSubMenuAction === 'hover') {
  251. return;
  252. }
  253. this.triggerOpenChange(!isOpen, 'click');
  254. updateDefaultActiveFirst(store, eventKey, false);
  255. },
  256. onSubMenuClick: function onSubMenuClick(info) {
  257. this.__emit('click', this.addKeyPath(info));
  258. },
  259. getPrefixCls: function getPrefixCls() {
  260. return this.$props.rootPrefixCls + '-submenu';
  261. },
  262. getActiveClassName: function getActiveClassName() {
  263. return this.getPrefixCls() + '-active';
  264. },
  265. getDisabledClassName: function getDisabledClassName() {
  266. return this.getPrefixCls() + '-disabled';
  267. },
  268. getSelectedClassName: function getSelectedClassName() {
  269. return this.getPrefixCls() + '-selected';
  270. },
  271. getOpenClassName: function getOpenClassName() {
  272. return this.$props.rootPrefixCls + '-submenu-open';
  273. },
  274. saveMenuInstance: function saveMenuInstance(c) {
  275. // children menu instance
  276. this.menuInstance = c;
  277. },
  278. addKeyPath: function addKeyPath(info) {
  279. return (0, _extends4['default'])({}, info, {
  280. keyPath: (info.keyPath || []).concat(this.$props.eventKey)
  281. });
  282. },
  283. // triggerOpenChange (open, type) {
  284. // const key = this.$props.eventKey
  285. // this.__emit('openChange', {
  286. // key,
  287. // item: this,
  288. // trigger: type,
  289. // open,
  290. // })
  291. // },
  292. triggerOpenChange: function triggerOpenChange(open, type) {
  293. var _this4 = this;
  294. var key = this.$props.eventKey;
  295. var openChange = function openChange() {
  296. _this4.__emit('openChange', {
  297. key: key,
  298. item: _this4,
  299. trigger: type,
  300. open: open
  301. });
  302. };
  303. if (type === 'mouseenter') {
  304. // make sure mouseenter happen after other menu item's mouseleave
  305. this.mouseenterTimeout = (0, _requestAnimationTimeout.requestAnimationTimeout)(function () {
  306. openChange();
  307. }, 0);
  308. } else {
  309. openChange();
  310. }
  311. },
  312. isChildrenSelected: function isChildrenSelected() {
  313. var ret = { find: false };
  314. (0, _util.loopMenuItemRecursively)(this.$slots['default'], this.$props.selectedKeys, ret);
  315. return ret.find;
  316. },
  317. // isOpen () {
  318. // return this.$props.openKeys.indexOf(this.$props.eventKey) !== -1
  319. // },
  320. adjustWidth: function adjustWidth() {
  321. /* istanbul ignore if */
  322. if (!this.$refs.subMenuTitle || !this.menuInstance) {
  323. return;
  324. }
  325. var popupMenu = this.menuInstance.$el;
  326. if (popupMenu.offsetWidth >= this.$refs.subMenuTitle.offsetWidth) {
  327. return;
  328. }
  329. /* istanbul ignore next */
  330. popupMenu.style.minWidth = this.$refs.subMenuTitle.offsetWidth + 'px';
  331. },
  332. renderChildren: function renderChildren(children) {
  333. var h = this.$createElement;
  334. var props = this.$props;
  335. var _getListeners = (0, _propsUtil.getListeners)(this),
  336. select = _getListeners.select,
  337. deselect = _getListeners.deselect,
  338. openChange = _getListeners.openChange;
  339. var subPopupMenuProps = {
  340. props: {
  341. mode: props.mode === 'horizontal' ? 'vertical' : props.mode,
  342. visible: props.isOpen,
  343. level: props.level + 1,
  344. inlineIndent: props.inlineIndent,
  345. focusable: false,
  346. selectedKeys: props.selectedKeys,
  347. eventKey: props.eventKey + '-menu-',
  348. openKeys: props.openKeys,
  349. openTransitionName: props.openTransitionName,
  350. openAnimation: props.openAnimation,
  351. subMenuOpenDelay: props.subMenuOpenDelay,
  352. parentMenu: this,
  353. subMenuCloseDelay: props.subMenuCloseDelay,
  354. forceSubMenuRender: props.forceSubMenuRender,
  355. triggerSubMenuAction: props.triggerSubMenuAction,
  356. builtinPlacements: props.builtinPlacements,
  357. defaultActiveFirst: props.store.getState().defaultActiveFirst[(0, _util.getMenuIdFromSubMenuEventKey)(props.eventKey)],
  358. multiple: props.multiple,
  359. prefixCls: props.rootPrefixCls,
  360. manualRef: this.saveMenuInstance,
  361. itemIcon: (0, _propsUtil.getComponentFromProp)(this, 'itemIcon'),
  362. expandIcon: (0, _propsUtil.getComponentFromProp)(this, 'expandIcon'),
  363. children: children
  364. },
  365. on: {
  366. click: this.onSubMenuClick,
  367. select: select,
  368. deselect: deselect,
  369. openChange: openChange
  370. },
  371. id: this.internalMenuId
  372. };
  373. var baseProps = subPopupMenuProps.props;
  374. var haveRendered = this.haveRendered;
  375. this.haveRendered = true;
  376. this.haveOpened = this.haveOpened || baseProps.visible || baseProps.forceSubMenuRender;
  377. // never rendered not planning to, don't render
  378. if (!this.haveOpened) {
  379. return h('div');
  380. }
  381. // don't show transition on first rendering (no animation for opened menu)
  382. // show appear transition if it's not visible (not sure why)
  383. // show appear transition if it's not inline mode
  384. var transitionAppear = haveRendered || !baseProps.visible || !baseProps.mode === 'inline';
  385. subPopupMenuProps['class'] = ' ' + baseProps.prefixCls + '-sub';
  386. var animProps = { appear: transitionAppear, css: false };
  387. var transitionProps = {
  388. props: animProps,
  389. on: {}
  390. };
  391. if (baseProps.openTransitionName) {
  392. transitionProps = (0, _getTransitionProps2['default'])(baseProps.openTransitionName, {
  393. appear: transitionAppear
  394. });
  395. } else if ((0, _typeof3['default'])(baseProps.openAnimation) === 'object') {
  396. animProps = (0, _extends4['default'])({}, animProps, baseProps.openAnimation.props || {});
  397. if (!transitionAppear) {
  398. animProps.appear = false;
  399. }
  400. } else if (typeof baseProps.openAnimation === 'string') {
  401. transitionProps = (0, _getTransitionProps2['default'])(baseProps.openAnimation, { appear: transitionAppear });
  402. }
  403. if ((0, _typeof3['default'])(baseProps.openAnimation) === 'object' && baseProps.openAnimation.on) {
  404. transitionProps.on = baseProps.openAnimation.on;
  405. }
  406. return h(
  407. 'transition',
  408. transitionProps,
  409. [h(_SubPopupMenu2['default'], (0, _babelHelperVueJsxMergeProps2['default'])([{
  410. directives: [{
  411. name: 'show',
  412. value: props.isOpen
  413. }]
  414. }, subPopupMenuProps]))]
  415. );
  416. }
  417. },
  418. render: function render() {
  419. var _className, _attrs;
  420. var h = arguments[0];
  421. var props = this.$props;
  422. var rootPrefixCls = this.rootPrefixCls,
  423. parentMenu = this.parentMenu;
  424. var isOpen = props.isOpen;
  425. var prefixCls = this.getPrefixCls();
  426. var isInlineMode = props.mode === 'inline';
  427. var className = (_className = {}, (0, _defineProperty3['default'])(_className, prefixCls, true), (0, _defineProperty3['default'])(_className, prefixCls + '-' + props.mode, true), (0, _defineProperty3['default'])(_className, this.getOpenClassName(), isOpen), (0, _defineProperty3['default'])(_className, this.getActiveClassName(), props.active || isOpen && !isInlineMode), (0, _defineProperty3['default'])(_className, this.getDisabledClassName(), props.disabled), (0, _defineProperty3['default'])(_className, this.getSelectedClassName(), this.isChildrenSelected()), _className);
  428. if (!this.internalMenuId) {
  429. if (props.eventKey) {
  430. this.internalMenuId = props.eventKey + '$Menu';
  431. } else {
  432. this.internalMenuId = '$__$' + ++guid + '$Menu';
  433. }
  434. }
  435. var mouseEvents = {};
  436. var titleClickEvents = {};
  437. var titleMouseEvents = {};
  438. if (!props.disabled) {
  439. mouseEvents = {
  440. mouseleave: this.onMouseLeave,
  441. mouseenter: this.onMouseEnter
  442. };
  443. // only works in title, not outer li
  444. titleClickEvents = {
  445. click: this.onTitleClick
  446. };
  447. titleMouseEvents = {
  448. mouseenter: this.onTitleMouseEnter,
  449. mouseleave: this.onTitleMouseLeave
  450. };
  451. }
  452. var style = {};
  453. if (isInlineMode) {
  454. style.paddingLeft = props.inlineIndent * props.level + 'px';
  455. }
  456. var ariaOwns = {};
  457. // only set aria-owns when menu is open
  458. // otherwise it would be an invalid aria-owns value
  459. // since corresponding node cannot be found
  460. if (isOpen) {
  461. ariaOwns = {
  462. 'aria-owns': this.internalMenuId
  463. };
  464. }
  465. var titleProps = {
  466. attrs: (0, _extends4['default'])({
  467. 'aria-expanded': isOpen
  468. }, ariaOwns, {
  469. 'aria-haspopup': 'true',
  470. title: typeof props.title === 'string' ? props.title : undefined
  471. }),
  472. on: (0, _extends4['default'])({}, titleMouseEvents, titleClickEvents),
  473. style: style,
  474. 'class': prefixCls + '-title',
  475. ref: 'subMenuTitle'
  476. };
  477. // expand custom icon should NOT be displayed in menu with horizontal mode.
  478. var icon = null;
  479. if (props.mode !== 'horizontal') {
  480. icon = (0, _propsUtil.getComponentFromProp)(this, 'expandIcon', props);
  481. }
  482. var title = h(
  483. 'div',
  484. titleProps,
  485. [(0, _propsUtil.getComponentFromProp)(this, 'title'), icon || h('i', { 'class': prefixCls + '-arrow' })]
  486. );
  487. var children = this.renderChildren((0, _propsUtil.filterEmpty)(this.$slots['default']));
  488. var getPopupContainer = this.parentMenu.isRootMenu ? this.parentMenu.getPopupContainer : function (triggerNode) {
  489. return triggerNode.parentNode;
  490. };
  491. var popupPlacement = popupPlacementMap[props.mode];
  492. var popupAlign = props.popupOffset ? { offset: props.popupOffset } : {};
  493. var popupClassName = props.mode === 'inline' ? '' : props.popupClassName;
  494. var liProps = {
  495. on: (0, _extends4['default'])({}, (0, _omit2['default'])((0, _propsUtil.getListeners)(this), ['click']), mouseEvents),
  496. 'class': className
  497. };
  498. return h(
  499. 'li',
  500. (0, _babelHelperVueJsxMergeProps2['default'])([liProps, {
  501. attrs: { role: 'menuitem' }
  502. }]),
  503. [isInlineMode && title, isInlineMode && children, !isInlineMode && h(
  504. _vcTrigger2['default'],
  505. {
  506. attrs: (_attrs = {
  507. prefixCls: prefixCls,
  508. popupClassName: prefixCls + '-popup ' + rootPrefixCls + '-' + parentMenu.theme + ' ' + (popupClassName || ''),
  509. getPopupContainer: getPopupContainer,
  510. builtinPlacements: _placements2['default']
  511. }, (0, _defineProperty3['default'])(_attrs, 'builtinPlacements', (0, _extends4['default'])({}, _placements2['default'], props.builtinPlacements)), (0, _defineProperty3['default'])(_attrs, 'popupPlacement', popupPlacement), (0, _defineProperty3['default'])(_attrs, 'popupVisible', isOpen), (0, _defineProperty3['default'])(_attrs, 'popupAlign', popupAlign), (0, _defineProperty3['default'])(_attrs, 'action', props.disabled ? [] : [props.triggerSubMenuAction]), (0, _defineProperty3['default'])(_attrs, 'mouseEnterDelay', props.subMenuOpenDelay), (0, _defineProperty3['default'])(_attrs, 'mouseLeaveDelay', props.subMenuCloseDelay), (0, _defineProperty3['default'])(_attrs, 'forceRender', props.forceSubMenuRender), _attrs),
  512. on: {
  513. 'popupVisibleChange': this.onPopupVisibleChange
  514. }
  515. },
  516. [h(
  517. 'template',
  518. { slot: 'popup' },
  519. [children]
  520. ), title]
  521. )]
  522. );
  523. }
  524. };
  525. var connected = (0, _store.connect)(function (_ref, _ref2) {
  526. var openKeys = _ref.openKeys,
  527. activeKey = _ref.activeKey,
  528. selectedKeys = _ref.selectedKeys;
  529. var eventKey = _ref2.eventKey,
  530. subMenuKey = _ref2.subMenuKey;
  531. return {
  532. isOpen: openKeys.indexOf(eventKey) > -1,
  533. active: activeKey[subMenuKey] === eventKey,
  534. selectedKeys: selectedKeys
  535. };
  536. })(SubMenu);
  537. connected.isSubMenu = true;
  538. exports['default'] = connected;