Skip to content

Commit 8285cbe

Browse files
longyunxia知吱zombieJ
authored
fix: activeKey 为数字0时无效修复 (#204)
* fix: activeKey 为数字0时无效修复 * test: activeKey支持数字0边界值测试用例 * chore: clean up Co-authored-by: 知吱 <[email protected]> Co-authored-by: zombiej <[email protected]>
1 parent ea1ab91 commit 8285cbe

File tree

3 files changed

+70
-57
lines changed

3 files changed

+70
-57
lines changed

src/Collapse.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import { CollapseProps, CollapsibleType } from './interface';
99
function getActiveKeysArray(activeKey: React.Key | React.Key[]) {
1010
let currentActiveKey = activeKey;
1111
if (!Array.isArray(currentActiveKey)) {
12-
currentActiveKey = currentActiveKey ? [currentActiveKey] : [];
12+
const activeKeyType = typeof currentActiveKey;
13+
currentActiveKey =
14+
activeKeyType === 'number' || activeKeyType === 'string' ? [currentActiveKey] : [];
1315
}
1416
return currentActiveKey.map((key) => String(key));
1517
}

tests/index.spec.tsx

Lines changed: 51 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React, { Fragment } from 'react';
2-
import { mount, ReactWrapper } from 'enzyme';
2+
import type { ReactWrapper } from 'enzyme';
3+
import { mount } from 'enzyme';
34

45
import KeyCode from 'rc-util/lib/KeyCode';
56

@@ -19,6 +20,7 @@ describe('collapse', () => {
1920

2021
function onChange(...args: any[]) {
2122
if (changeHook) {
23+
// eslint-disable-next-line @typescript-eslint/no-invalid-this
2224
changeHook.apply(this, args);
2325
}
2426
}
@@ -36,12 +38,9 @@ describe('collapse', () => {
3638

3739
it('add className', () => {
3840
const expectedClassName = 'rc-collapse-item important';
39-
expect(
40-
collapse
41-
.find('.rc-collapse-item')
42-
.at(2)
43-
.getDOMNode().className,
44-
).toBe(expectedClassName);
41+
expect(collapse.find('.rc-collapse-item').at(2).getDOMNode().className).toBe(
42+
expectedClassName,
43+
);
4544
});
4645

4746
it('create works', () => {
@@ -58,12 +57,9 @@ describe('collapse', () => {
5857
});
5958

6059
it('should render custom arrow icon corrctly', () => {
61-
expect(
62-
collapse
63-
.find('.rc-collapse-header')
64-
.at(0)
65-
.getDOMNode().textContent,
66-
).toContain('test>');
60+
expect(collapse.find('.rc-collapse-header').at(0).getDOMNode().textContent).toContain(
61+
'test>',
62+
);
6763
});
6864

6965
it('default active works', () => {
@@ -78,10 +74,7 @@ describe('collapse', () => {
7874

7975
it('onChange works', () => {
8076
changeHook = jest.fn();
81-
collapse
82-
.find('.rc-collapse-header')
83-
.at(1)
84-
.simulate('click');
77+
collapse.find('.rc-collapse-header').at(1).simulate('click');
8578
expect(changeHook.mock.calls[0][0]).toEqual(['2']);
8679
});
8780

@@ -94,12 +87,9 @@ describe('collapse', () => {
9487
header.simulate('click');
9588
jest.runAllTimers();
9689
collapse.update();
97-
expect(
98-
collapse
99-
.find('.rc-collapse-content-inactive')
100-
.at(0)
101-
.getDOMNode().innerHTML,
102-
).toBe('<div class="rc-collapse-content-box">second</div>');
90+
expect(collapse.find('.rc-collapse-content-inactive').at(0).getDOMNode().innerHTML).toBe(
91+
'<div class="rc-collapse-content-box">second</div>',
92+
);
10393
expect(collapse.find('.rc-collapse-content-active').length).toBe(0);
10494
});
10595

@@ -211,6 +201,25 @@ describe('collapse', () => {
211201

212202
runNormalTest(element);
213203
});
204+
describe('it should support activeKey number 0', () => {
205+
const collapse = mount(
206+
<Collapse onChange={onChange} activeKey={0}>
207+
<Panel header="collapse 0" key={0}>
208+
zero
209+
</Panel>
210+
<Panel header="collapse 1" key={1}>
211+
first
212+
</Panel>
213+
<Panel header="collapse 2" key={2}>
214+
second
215+
</Panel>
216+
</Collapse>,
217+
);
218+
219+
it('activeKey number 0, should open one item', () => {
220+
expect(collapse.find('.rc-collapse-content-active').length).toBe(1);
221+
});
222+
});
214223

215224
describe('destroyInactivePanel', () => {
216225
const collapse = mount(
@@ -356,9 +365,15 @@ describe('collapse', () => {
356365
</Panel>
357366
</Collapse>,
358367
);
368+
369+
jest.runAllTimers();
370+
collapse.update();
371+
359372
expect(collapse.find('.rc-collapse-content').length).toBe(1);
360373
expect(collapse.find('.rc-collapse-content-active').length).toBe(0);
361-
expect(collapse.find('div.rc-collapse-content-hidden').length).toBe(1);
374+
expect(collapse.find('div.rc-collapse-content-inactive').props().style).toEqual({
375+
display: 'none',
376+
});
362377
});
363378
});
364379

@@ -383,44 +398,29 @@ describe('collapse', () => {
383398
</Panel>
384399
</Collapse>,
385400
);
386-
collapse
387-
.find('.rc-collapse-header')
388-
.at(2)
389-
.simulate('keyPress', {
390-
keyCode: KeyCode.ENTER,
391-
});
401+
collapse.find('.rc-collapse-header').at(2).simulate('keyPress', {
402+
keyCode: KeyCode.ENTER,
403+
});
392404
jest.runAllTimers();
393405
collapse.update();
394406
expect(collapse.find('.rc-collapse-content-active').length).toBe(0);
395-
collapse
396-
.find('.rc-collapse-header')
397-
.at(0)
398-
.simulate('keyPress', {
399-
keyCode: KeyCode.ENTER,
400-
});
407+
collapse.find('.rc-collapse-header').at(0).simulate('keyPress', {
408+
keyCode: KeyCode.ENTER,
409+
});
401410
jest.runAllTimers();
402411
collapse.update();
403412
expect(collapse.find('.rc-collapse-content-active').length).toBe(1);
404413
expect(
405-
collapse
406-
.find('.rc-collapse-content')
407-
.at(0)
408-
.hasClass('rc-collapse-content-active'),
414+
collapse.find('.rc-collapse-content').at(0).hasClass('rc-collapse-content-active'),
409415
).toBeTruthy();
410-
collapse
411-
.find('.rc-collapse-header')
412-
.at(0)
413-
.simulate('keyPress', {
414-
keyCode: KeyCode.ENTER,
415-
});
416+
collapse.find('.rc-collapse-header').at(0).simulate('keyPress', {
417+
keyCode: KeyCode.ENTER,
418+
});
416419
jest.runAllTimers();
417420
collapse.update();
418421
expect(collapse.find('.rc-collapse-content-active').length).toBe(0);
419422
expect(
420-
collapse
421-
.find('.rc-collapse-content')
422-
.at(0)
423-
.hasClass('rc-collapse-content-active'),
423+
collapse.find('.rc-collapse-content').at(0).hasClass('rc-collapse-content-active'),
424424
).toBeFalsy();
425425
});
426426
});
@@ -456,12 +456,7 @@ describe('collapse', () => {
456456
</Panel>
457457
</Collapse>,
458458
);
459-
expect(
460-
wrapper
461-
.find('.rc-collapse-header')
462-
.at(0)
463-
.getDOMNode().childNodes.length,
464-
).toBe(1);
459+
expect(wrapper.find('.rc-collapse-header').at(0).getDOMNode().childNodes.length).toBe(1);
465460
});
466461

467462
it('should support custom child', () => {

tsconfig.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"compilerOptions": {
3+
"target": "esnext",
4+
"moduleResolution": "node",
5+
"baseUrl": "./",
6+
"jsx": "preserve",
7+
"declaration": true,
8+
"skipLibCheck": true,
9+
"esModuleInterop": true,
10+
"paths": {
11+
"@/*": ["src/*"],
12+
"@@/*": ["src/.umi/*"],
13+
"rc-collapse": ["src/index.tsx"]
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)