((props, ref) =>
);
});
-export default Object.assign(Collapse, {
- /**
- * @deprecated use `items` instead, will be removed in `v4.0.0`
- */
- Panel: CollapsePanel,
-});
+export default Collapse;
diff --git a/src/index.tsx b/src/index.tsx
index 8e963c68..87e21e7e 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,10 +1,2 @@
-import Collapse from './Collapse';
-
+export { default } from './Collapse';
export type { CollapsePanelProps, CollapseProps } from './interface';
-
-export default Collapse;
-
-/**
- * @deprecated use `items` instead, will be removed in `v4.0.0`
- */
-export const { Panel } = Collapse;
diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx
index 533df08b..6ca2c0ef 100644
--- a/tests/index.spec.tsx
+++ b/tests/index.spec.tsx
@@ -1,8 +1,8 @@
import type { RenderResult } from '@testing-library/react';
import { fireEvent, render } from '@testing-library/react';
import KeyCode from 'rc-util/lib/KeyCode';
-import React, { Fragment } from 'react';
-import Collapse, { Panel } from '../src/index';
+import React from 'react';
+import Collapse from '../src/index';
import type { CollapseProps, ItemType } from '../src/interface';
describe('collapse', () => {
@@ -24,6 +24,27 @@ describe('collapse', () => {
}
}
+ const items: ItemType[] = [
+ {
+ key: '1',
+ header: 'collapse 1',
+ collapsible: 'disabled',
+ children: 'first',
+ },
+ {
+ key: '2',
+ header: 'collapse 2',
+ extra:
ExtraSpan,
+ children: 'second',
+ },
+ {
+ key: '3',
+ header: 'collapse 3',
+ className: 'important',
+ children: 'third',
+ },
+ ];
+
function runNormalTest(element: any) {
let collapse: RenderResult;
@@ -115,21 +136,7 @@ describe('collapse', () => {
describe('collapse', () => {
const expandIcon = () =>
test{'>'};
- const element = (
-
-
- first
-
- ExtraSpan}>
- second
-
-
- third
-
-
- );
-
- runNormalTest(element);
+ runNormalTest(
);
it('controlled', () => {
const onChangeSpy = jest.fn();
@@ -143,17 +150,27 @@ describe('collapse', () => {
};
return (
-
-
- first
-
-
- second
-
-
- third
-
-
+
);
};
@@ -170,31 +187,32 @@ describe('collapse', () => {
});
describe('it should support number key', () => {
- const expandIcon = () =>
test{'>'};
- const element = (
-
-
- first
-
- ExtraSpan}>
- second
-
-
- third
-
-
+ runNormalTest(
+
test{'>'}}
+ items={items.map((item) => ({
+ ...item,
+ key: Number(item.key),
+ }))}
+ />,
);
-
- runNormalTest(element);
});
it('shoule support extra whit number 0', () => {
const { container } = render(
-
-
- zero
-
- ,
+ ,
);
const extraNodes = container.querySelectorAll('.rc-collapse-extra');
@@ -204,17 +222,14 @@ describe('collapse', () => {
it('should support activeKey number 0', () => {
const { container } = render(
-
-
- zero
-
-
- first
-
-
- second
-
- ,
+ ({
+ ...item,
+ key: index,
+ }))}
+ />,
);
// activeKey number 0, should open one item
@@ -223,17 +238,7 @@ describe('collapse', () => {
it('click should toggle panel state', () => {
const { container } = render(
-
-
- first
-
-
- second
-
-
- third
-
- ,
+ ,
);
const header = container.querySelectorAll('.rc-collapse-header')?.[1];
@@ -247,11 +252,29 @@ describe('collapse', () => {
let collapse: RenderResult;
beforeEach(() => {
- collapse = render(element);
- });
-
- afterEach(() => {
- collapse.unmount();
+ collapse = render(
+ ,
+ );
});
it('accordion content, should default open zero item', () => {
@@ -309,22 +332,6 @@ describe('collapse', () => {
expect(item).toBeTruthy();
expect(item!.getAttribute('role')).toBe('tabpanel');
});
- }
-
- describe('prop: accordion', () => {
- runAccordionTest(
-
-
- first
-
-
- second
-
-
- third
-
- ,
- );
});
describe('forceRender', () => {
@@ -344,28 +351,42 @@ describe('collapse', () => {
it('when forceRender is FALSE it should lazy render the panel content', () => {
const { container } = render(
-
-
- first
-
-
- second
-
- ,
+ ,
);
expect(container.querySelectorAll('.rc-collapse-content')).toHaveLength(0);
});
it('when forceRender is TRUE then it should render all the panel content to the DOM', () => {
const { container } = render(
-
-
- first
-
-
- second
-
- ,
+ ,
);
jest.runAllTimers();
@@ -388,17 +409,26 @@ describe('collapse', () => {
};
const { container } = render(
-
-
- first
-
-
- second
-
-
- second
-
- ,
+ ,
);
fireEvent.keyPress(container.querySelectorAll('.rc-collapse-header')?.[2], myKeyEvent);
@@ -423,46 +453,57 @@ describe('collapse', () => {
);
});
- describe('wrapped in Fragment', () => {
- const expandIcon = () => test{'>'};
- const element = (
-
-
-
- first
-
- ExtraSpan}>
- second
-
-
-
- third
-
-
-
-
- );
-
- runNormalTest(element);
- });
+ // TODO: 移除 Panel 后需要在 Ant Design 里面测试,待 Ant Design 稳定后再移除 by @Wxh16144
+ // describe.skip('wrapped in Fragment', () => {
+ // const expandIcon = () => test{'>'};
+ // const element = (
+ //
+ //
+ //
+ // first
+ //
+ // ExtraSpan}>
+ // second
+ //
+ //
+ //
+ // third
+ //
+ //
+ //
+ //
+ // );
+
+ // runNormalTest(element);
+ // });
it('should support return null icon', () => {
const { container } = render(
- null}>
-
- first
-
- ,
+ null}
+ items={[
+ {
+ key: '1',
+ header: 'title',
+ children: 'first',
+ },
+ ]}
+ />,
);
expect(container.querySelector('.rc-collapse-header')?.childNodes).toHaveLength(1);
});
it('should support custom child', () => {
const { container } = render(
-
-
- first
-
+
custom-child
,
);
@@ -472,44 +513,49 @@ describe('collapse', () => {
// https://github.com/ant-design/ant-design/issues/36327
// https://github.com/ant-design/ant-design/issues/6179
// https://github.com/react-component/collapse/issues/73#issuecomment-323626120
- it('should support custom component', () => {
- const PanelElement = (props) => (
-
- test
-
- );
- const { container } = render(
-
-
-
- second
-
- ,
- );
-
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
- expect(container.querySelector('.rc-collapse-content')).toHaveClass(
- 'rc-collapse-content-active',
- );
- expect(container.querySelector('.rc-collapse-header')?.textContent).toBe('collapse 1');
- expect(container.querySelector('.rc-collapse-header')?.querySelectorAll('.arrow')).toHaveLength(
- 1,
- );
- fireEvent.click(container.querySelector('.rc-collapse-header')!);
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
- expect(container.querySelector('.rc-collapse-content')).toHaveClass(
- 'rc-collapse-content-inactive',
- );
- });
+ // TODO: 移除 Panel 后需要在 Ant Design 里面测试,待 Ant Design 稳定后再移除 by @Wxh16144
+ // it.skip('should support custom component', () => {
+ // const PanelElement = (props) => (
+ //
+ // test
+ //
+ // );
+ // const { container } = render(
+ //
+ //
+ //
+ // second
+ //
+ // ,
+ // );
+
+ // expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ // expect(container.querySelector('.rc-collapse-content')).toHaveClass(
+ // 'rc-collapse-content-active',
+ // );
+ // expect(container.querySelector('.rc-collapse-header')?.textContent).toBe('collapse 1');
+ // expect(container.querySelector('.rc-collapse-header')?.querySelectorAll('.arrow')).toHaveLength(
+ // 1,
+ // );
+ // fireEvent.click(container.querySelector('.rc-collapse-header')!);
+ // expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
+ // expect(container.querySelector('.rc-collapse-content')).toHaveClass(
+ // 'rc-collapse-content-inactive',
+ // );
+ // });
describe('prop: collapsible', () => {
it('default', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
expect(container.querySelector('.rc-collapse-header-text')).toBeTruthy();
fireEvent.click(container.querySelector('.rc-collapse-header')!);
@@ -517,11 +563,16 @@ describe('collapse', () => {
});
it('should work when value is header', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
expect(container.querySelector('.rc-collapse-header-text')).toBeTruthy();
fireEvent.click(container.querySelector('.rc-collapse-header')!);
@@ -531,11 +582,16 @@ describe('collapse', () => {
});
it('should work when value is icon', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
expect(container.querySelector('.rc-collapse-expand-icon')).toBeTruthy();
fireEvent.click(container.querySelector('.rc-collapse-header')!);
@@ -546,11 +602,16 @@ describe('collapse', () => {
it('should disabled when value is disabled', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
expect(container.querySelector('.rc-collapse-header-text')).toBeTruthy();
expect(container.querySelectorAll('.rc-collapse-item-disabled')).toHaveLength(1);
@@ -560,11 +621,17 @@ describe('collapse', () => {
it('the value of panel should be read first', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
expect(container.querySelector('.rc-collapse-header-text')).toBeTruthy();
@@ -576,11 +643,16 @@ describe('collapse', () => {
it('icon trigger when collapsible equal header', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
fireEvent.click(container.querySelector('.rc-collapse-header .arrow')!);
@@ -589,11 +661,16 @@ describe('collapse', () => {
it('header not trigger when collapsible equal icon', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
fireEvent.click(container.querySelector('.rc-collapse-header-text')!);
@@ -603,11 +680,16 @@ describe('collapse', () => {
it('!showArrow', () => {
const { container } = render(
-
-
- first
-
- ,
+ ,
);
expect(container.querySelectorAll('.rc-collapse-expand-icon')).toHaveLength(0);
@@ -616,46 +698,38 @@ describe('collapse', () => {
it('Panel container dom can set event handler', () => {
const clickHandler = jest.fn();
const { container } = render(
-
-
- Click this
-
- ,
+ Click this ,
+ },
+ ]}
+ />,
);
fireEvent.click(container.querySelector('.target')!);
expect(clickHandler).toHaveBeenCalled();
});
- it('falsy Panel', () => {
- const { container } = render(
-