Skip to content

Commit

Permalink
update activeKey when changed (#228)
Browse files Browse the repository at this point in the history
  • Loading branch information
zombieJ committed Nov 27, 2018
1 parent 77a6078 commit e8fc89e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/SubPopupMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,13 +141,20 @@ export class SubPopupMenu extends React.Component {
return this.props.visible || nextProps.visible;
}

componentDidUpdate() {
componentDidUpdate(prevProps) {
const props = this.props;
const originalActiveKey = 'activeKey' in props ? props.activeKey :
props.store.getState().activeKey[getEventKey(props)];
const activeKey = getActiveKey(props, originalActiveKey);
if (activeKey !== originalActiveKey) {
updateActiveKey(props.store, getEventKey(props), activeKey);
} else if ('activeKey' in prevProps) {
// If prev activeKey is not same as current activeKey,
// we should set it.
const prevActiveKey = getActiveKey(prevProps, prevProps.activeKey);
if (activeKey !== prevActiveKey) {
updateActiveKey(props.store, getEventKey(props), activeKey);
}
}
}

Expand Down
23 changes: 23 additions & 0 deletions tests/SubPopupMenu.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import React from 'react';
import { mount } from 'enzyme';
import { saveRef } from '../src/SubPopupMenu';
import Menu, { MenuItem } from '../src';

describe('SubPopupMenu saveRef', () => {
let subPopupMenu;
Expand All @@ -21,4 +24,24 @@ describe('SubPopupMenu saveRef', () => {

expect(subPopupMenu.instanceArray).toEqual([c]);
});

it('activeKey change should reset store activeKey', () => {
const wrapper = mount(
<Menu activeKey="1">
<MenuItem key="1">1</MenuItem>
<MenuItem key="2">2</MenuItem>
</Menu>
);

function getItemActive(index) {
return wrapper.find('MenuItem').at(index).instance().props.active;
}
expect(getItemActive(0)).toBe(true);
expect(getItemActive(1)).toBe(false);

wrapper.setProps({ activeKey: '2' });

expect(getItemActive(0)).toBe(false);
expect(getItemActive(1)).toBe(true);
});
});

0 comments on commit e8fc89e

Please sign in to comment.