From 9c6b70bc55aa793dd849972672bd423c74705356 Mon Sep 17 00:00:00 2001
From: thinkasany <480968828@qq.com>
Date: Wed, 8 Jan 2025 10:42:04 +0800
Subject: [PATCH 1/3] feat: add content for Semantic
---
src/PanelContent.tsx | 3 ++-
src/interface.ts | 2 +-
tests/index.spec.tsx | 5 +++++
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/PanelContent.tsx b/src/PanelContent.tsx
index dac6aa9..d4f7b8d 100644
--- a/src/PanelContent.tsx
+++ b/src/PanelContent.tsx
@@ -35,13 +35,14 @@ const PanelContent = React.forwardRef<
ref={ref}
className={classnames(
`${prefixCls}-content`,
+ customizeClassNames?.content,
{
[`${prefixCls}-content-active`]: isActive,
[`${prefixCls}-content-inactive`]: !isActive,
},
className,
)}
- style={style}
+ style={{ ...style, ...styles?.content }}
role={role}
>
{
id?: string;
header?: string | React.ReactNode;
diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx
index 3b23a22..bc8686e 100644
--- a/tests/index.spec.tsx
+++ b/tests/index.spec.tsx
@@ -866,12 +866,14 @@ describe('collapse', () => {
body: { color: 'blue' },
title: { color: 'green' },
icon: { color: 'yellow' },
+ content: { color: 'purple' },
};
const customClassnames = {
header: 'custom-header',
body: 'custom-body',
title: 'custom-title',
icon: 'custom-icon',
+ content: 'custom-content',
};
const { container } = render(
@@ -889,18 +891,21 @@ describe('collapse', () => {
);
const headerElement = container.querySelector('.rc-collapse-header') as HTMLElement;
const bodyElement = container.querySelector('.rc-collapse-body') as HTMLElement;
+ const contentElement = container.querySelector('.rc-collapse-content') as HTMLElement;
const titleElement = container.querySelector('.rc-collapse-title') as HTMLElement;
const iconElement = container.querySelector('.rc-collapse-expand-icon') as HTMLElement;
// check classNames
expect(headerElement.classList).toContain('custom-header');
expect(bodyElement.classList).toContain('custom-body');
+ expect(contentElement.classList).toContain('custom-content');
expect(titleElement.classList).toContain('custom-title');
expect(iconElement.classList).toContain('custom-icon');
// check styles
expect(headerElement.style.color).toBe('red');
expect(bodyElement.style.color).toBe('blue');
+ expect(contentElement.style.color).toBe('purple');
expect(titleElement.style.color).toBe('green');
expect(iconElement.style.color).toBe('yellow');
});
From f60e0cb444a6a66d8ca5b2273883d92fc9f6603c Mon Sep 17 00:00:00 2001
From: thinkasany <480968828@qq.com>
Date: Wed, 8 Jan 2025 11:42:25 +0800
Subject: [PATCH 2/3] fix
---
src/PanelContent.tsx | 5 ++---
src/interface.ts | 2 +-
tests/index.spec.tsx | 5 -----
3 files changed, 3 insertions(+), 9 deletions(-)
diff --git a/src/PanelContent.tsx b/src/PanelContent.tsx
index d4f7b8d..4608631 100644
--- a/src/PanelContent.tsx
+++ b/src/PanelContent.tsx
@@ -34,15 +34,14 @@ const PanelContent = React.forwardRef<
{
id?: string;
header?: string | React.ReactNode;
diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx
index bc8686e..3b23a22 100644
--- a/tests/index.spec.tsx
+++ b/tests/index.spec.tsx
@@ -866,14 +866,12 @@ describe('collapse', () => {
body: { color: 'blue' },
title: { color: 'green' },
icon: { color: 'yellow' },
- content: { color: 'purple' },
};
const customClassnames = {
header: 'custom-header',
body: 'custom-body',
title: 'custom-title',
icon: 'custom-icon',
- content: 'custom-content',
};
const { container } = render(
@@ -891,21 +889,18 @@ describe('collapse', () => {
);
const headerElement = container.querySelector('.rc-collapse-header') as HTMLElement;
const bodyElement = container.querySelector('.rc-collapse-body') as HTMLElement;
- const contentElement = container.querySelector('.rc-collapse-content') as HTMLElement;
const titleElement = container.querySelector('.rc-collapse-title') as HTMLElement;
const iconElement = container.querySelector('.rc-collapse-expand-icon') as HTMLElement;
// check classNames
expect(headerElement.classList).toContain('custom-header');
expect(bodyElement.classList).toContain('custom-body');
- expect(contentElement.classList).toContain('custom-content');
expect(titleElement.classList).toContain('custom-title');
expect(iconElement.classList).toContain('custom-icon');
// check styles
expect(headerElement.style.color).toBe('red');
expect(bodyElement.style.color).toBe('blue');
- expect(contentElement.style.color).toBe('purple');
expect(titleElement.style.color).toBe('green');
expect(iconElement.style.color).toBe('yellow');
});
From 4c499a1a56e5969c643573d1e9643d0f6a406a7d Mon Sep 17 00:00:00 2001
From: thinkasany <480968828@qq.com>
Date: Wed, 8 Jan 2025 15:41:39 +0800
Subject: [PATCH 3/3] update
---
assets/index.less | 4 +-
assets/motion.less | 2 +-
docs/examples/_util/motionUtil.ts | 2 +-
src/Panel.tsx | 2 +-
src/PanelContent.tsx | 4 +-
tests/index.spec.tsx | 68 ++++++++++++++-----------------
6 files changed, 38 insertions(+), 44 deletions(-)
diff --git a/assets/index.less b/assets/index.less
index 9000017..4093e0f 100644
--- a/assets/index.less
+++ b/assets/index.less
@@ -82,7 +82,7 @@
background-color: #f3f3f3;
}
- &-content {
+ &-panel {
overflow: hidden;
color: @text-color;
padding: 0 16px;
@@ -99,7 +99,7 @@
}
&-item:last-child {
- > .@{prefixCls}-content {
+ > .@{prefixCls}-panel {
border-radius: 0 0 3px 3px;
}
}
diff --git a/assets/motion.less b/assets/motion.less
index a011851..e85e1a6 100644
--- a/assets/motion.less
+++ b/assets/motion.less
@@ -5,7 +5,7 @@
transition: height 0.3s, opacity 0.3s;
}
- &-content-hidden {
+ &-panel-hidden {
display: none;
}
}
diff --git a/docs/examples/_util/motionUtil.ts b/docs/examples/_util/motionUtil.ts
index c822ca9..802a022 100644
--- a/docs/examples/_util/motionUtil.ts
+++ b/docs/examples/_util/motionUtil.ts
@@ -15,7 +15,7 @@ const collapseMotion: CSSMotionProps = {
onEnterEnd: skipOpacityTransition,
onLeaveEnd: skipOpacityTransition,
motionDeadline: 500,
- leavedClassName: 'rc-collapse-content-hidden',
+ leavedClassName: 'rc-collapse-panel-hidden',
};
export default collapseMotion;
diff --git a/src/Panel.tsx b/src/Panel.tsx
index 6254899..613719f 100644
--- a/src/Panel.tsx
+++ b/src/Panel.tsx
@@ -101,7 +101,7 @@ const CollapsePanel = React.forwardRef((prop
{
it('panel works', () => {
expect(collapse.container.querySelectorAll('.rc-collapse-item')).toHaveLength(3);
- expect(collapse.container.querySelectorAll('.rc-collapse-content')).toHaveLength(0);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel')).toHaveLength(0);
});
it('should render custom arrow icon correctly', () => {
@@ -82,13 +82,13 @@ describe('collapse', () => {
const header = collapse.container.querySelectorAll('.rc-collapse-header')?.[1];
fireEvent.click(header);
jest.runAllTimers();
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
fireEvent.click(header);
jest.runAllTimers();
- expect(collapse.container.querySelector('.rc-collapse-content-inactive')?.innerHTML).toBe(
+ expect(collapse.container.querySelector('.rc-collapse-panel-inactive')?.innerHTML).toBe(
'second
',
);
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active').length).toBeFalsy();
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active').length).toBeFalsy();
});
it('click should not toggle disabled panel state', () => {
@@ -96,7 +96,7 @@ describe('collapse', () => {
expect(header).toBeTruthy();
fireEvent.click(header!);
jest.runAllTimers();
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active').length).toBeFalsy();
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active').length).toBeFalsy();
});
it('should not have role', () => {
@@ -159,12 +159,12 @@ describe('collapse', () => {
const { container } = render();
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
const header = container.querySelector('.rc-collapse-header');
expect(header).toBeTruthy();
fireEvent.click(header!);
jest.runAllTimers();
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(2);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(2);
expect(onChangeSpy).toBeCalledWith(['2', '1']);
});
});
@@ -235,7 +235,7 @@ describe('collapse', () => {
);
// activeKey number 0, should open one item
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
});
it('click should toggle panel state', () => {
@@ -255,9 +255,9 @@ describe('collapse', () => {
const header = container.querySelectorAll('.rc-collapse-header')?.[1];
fireEvent.click(header);
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
fireEvent.click(header);
- expect(container.querySelectorAll('.rc-collapse-content-inactive').length).toBeFalsy();
+ expect(container.querySelectorAll('.rc-collapse-panel-inactive').length).toBeFalsy();
});
function runAccordionTest(element: React.ReactElement) {
@@ -272,7 +272,7 @@ describe('collapse', () => {
});
it('accordion content, should default open zero item', () => {
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(0);
});
it('accordion item, should default open zero item', () => {
@@ -283,12 +283,12 @@ describe('collapse', () => {
let header = collapse.container.querySelectorAll('.rc-collapse-header')?.[1];
fireEvent.click(header);
jest.runAllTimers();
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
expect(collapse.container.querySelectorAll('.rc-collapse-item-active')).toHaveLength(1);
header = collapse.container.querySelectorAll('.rc-collapse-header')?.[1];
fireEvent.click(header);
jest.runAllTimers();
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(0);
expect(collapse.container.querySelectorAll('.rc-collapse-item-active')).toHaveLength(0);
});
@@ -297,12 +297,12 @@ describe('collapse', () => {
expect(header).toBeTruthy();
fireEvent.click(header!);
jest.runAllTimers();
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
expect(collapse.container.querySelectorAll('.rc-collapse-item-active')).toHaveLength(1);
header = collapse.container.querySelectorAll('.rc-collapse-header')?.[2];
fireEvent.click(header);
jest.runAllTimers();
- expect(collapse.container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(collapse.container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
expect(collapse.container.querySelectorAll('.rc-collapse-item-active')).toHaveLength(1);
});
@@ -322,7 +322,7 @@ describe('collapse', () => {
const header = collapse.container.querySelector('.rc-collapse-header');
expect(header).toBeTruthy();
fireEvent.click(header!);
- const item = collapse.container.querySelector('.rc-collapse-content');
+ const item = collapse.container.querySelector('.rc-collapse-panel');
expect(item).toBeTruthy();
expect(item!.getAttribute('role')).toBe('tabpanel');
});
@@ -356,7 +356,7 @@ describe('collapse', () => {
,
);
- expect(container.querySelectorAll('.rc-collapse-content')).toHaveLength(0);
+ expect(container.querySelectorAll('.rc-collapse-panel')).toHaveLength(0);
});
it('when forceRender is FALSE it should lazy render the panel content', () => {
@@ -370,7 +370,7 @@ describe('collapse', () => {
,
);
- expect(container.querySelectorAll('.rc-collapse-content')).toHaveLength(0);
+ expect(container.querySelectorAll('.rc-collapse-panel')).toHaveLength(0);
});
it('when forceRender is TRUE then it should render all the panel content to the DOM', () => {
@@ -387,9 +387,9 @@ describe('collapse', () => {
jest.runAllTimers();
- expect(container.querySelectorAll('.rc-collapse-content')).toHaveLength(1);
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
- const inactiveDom = container.querySelector('div.rc-collapse-content-inactive');
+ expect(container.querySelectorAll('.rc-collapse-panel')).toHaveLength(1);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(0);
+ const inactiveDom = container.querySelector('div.rc-collapse-panel-inactive');
expect(inactiveDom).not.toBeFalsy();
expect(getComputedStyle(inactiveDom!)).toHaveProperty('display', 'none');
});
@@ -420,23 +420,21 @@ describe('collapse', () => {
fireEvent.keyDown(container.querySelectorAll('.rc-collapse-header')?.[2], myKeyEvent);
jest.runAllTimers();
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(0);
fireEvent.keyDown(container.querySelector('.rc-collapse-header')!, myKeyEvent);
jest.runAllTimers();
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
- expect(container.querySelector('.rc-collapse-content')).toHaveClass(
- 'rc-collapse-content-active',
- );
+ expect(container.querySelector('.rc-collapse-panel')).toHaveClass('rc-collapse-panel-active');
fireEvent.keyDown(container.querySelector('.rc-collapse-header')!, myKeyEvent);
jest.runAllTimers();
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);
- expect(container.querySelector('.rc-collapse-content')!.className).not.toContain(
- 'rc-collapse-content-active',
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(0);
+ expect(container.querySelector('.rc-collapse-panel')!.className).not.toContain(
+ 'rc-collapse-panel-active',
);
});
@@ -504,19 +502,15 @@ describe('collapse', () => {
,
);
- expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1);
- expect(container.querySelector('.rc-collapse-content')).toHaveClass(
- 'rc-collapse-content-active',
- );
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(1);
+ expect(container.querySelector('.rc-collapse-panel')).toHaveClass('rc-collapse-panel-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',
- );
+ expect(container.querySelectorAll('.rc-collapse-panel-active')).toHaveLength(0);
+ expect(container.querySelector('.rc-collapse-panel')).toHaveClass('rc-collapse-panel-inactive');
});
describe('prop: collapsible', () => {