From 7366ed8467aaff04205dc6e1beb8bfa5c6f16fb2 Mon Sep 17 00:00:00 2001 From: zihao <497244062@qq.com> Date: Mon, 31 Oct 2022 19:32:28 +0800 Subject: [PATCH 1/4] feat(collapse): support multiple types of expandIcon property support multiple types of expandIcon property fix #1661 --- src/collapse/CollapsePanel.tsx | 45 ++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/collapse/CollapsePanel.tsx b/src/collapse/CollapsePanel.tsx index e5f2c2333..83371267e 100644 --- a/src/collapse/CollapsePanel.tsx +++ b/src/collapse/CollapsePanel.tsx @@ -39,8 +39,9 @@ const CollapsePanel = (props: CollapsePanelProps) => { const { classPrefix } = useConfig(); const componentName = `${classPrefix}-collapse-panel`; const innerValue = value || index; - const showExpandIcon = expandIcon === undefined ? expandIconAll : expandIcon; + const finalExpandIcon = (expandIcon === undefined ? expandIconAll : expandIcon) || null; const headRef = useRef(); + const iconRef = useRef(); const contentRef = useRef(); const bodyRef = useRef(); const isDisabled = disabled || disableAll; @@ -63,23 +64,35 @@ const CollapsePanel = (props: CollapsePanelProps) => { ); const handleClick = (e) => { - const canExpand = - (expandOnRowClick && e.target === headRef.current) || ['svg', 'path'].includes((e.target as Element).tagName); + const canExpand = (expandOnRowClick && e.currentTarget === headRef.current) || e.currentTarget === iconRef.current; if (canExpand && !isDisabled) { updateCollapseValue(innerValue); } + e.stopPropagation(); }; - const renderIcon = (direction: string) => ( - - ); + const renderIcon = () => { + let iconNode = null; + if (React.isValidElement(finalExpandIcon)) { + iconNode = finalExpandIcon; + } else if (finalExpandIcon) { + iconNode = ; + } + return ( + iconNode && ( +
+ {iconNode} +
+ ) + ); + }; const renderHeader = () => { const cls = [ @@ -90,11 +103,11 @@ const CollapsePanel = (props: CollapsePanelProps) => { ]; return (
- {showExpandIcon && expandIconPlacement === 'left' ? renderIcon(expandIconPlacement) : null} - {header} + {expandIconPlacement === 'left' && renderIcon()} + {header && header}
- {headerRightContent} - {showExpandIcon && expandIconPlacement === 'right' ? renderIcon(expandIconPlacement) : null} + {headerRightContent && headerRightContent} + {expandIconPlacement === 'right' && renderIcon()}
); }; From 5f800347cee9ad21c233d8728e0ff194190ac6e3 Mon Sep 17 00:00:00 2001 From: zihao <497244062@qq.com> Date: Tue, 1 Nov 2022 15:01:09 +0800 Subject: [PATCH 2/4] docs: update demo update demo --- src/collapse/_example/icon.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/collapse/_example/icon.jsx b/src/collapse/_example/icon.jsx index 72cba4654..44bcc01d9 100644 --- a/src/collapse/_example/icon.jsx +++ b/src/collapse/_example/icon.jsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; import { Collapse, TagInput, Radio, Checkbox, Space } from 'tdesign-react'; +import { StarIcon } from 'tdesign-icons-react'; const { Panel } = Collapse; @@ -29,6 +30,9 @@ export default function CollapseExample() { + }> + 这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。 + From 77c1e6d0562706b20d4ddef030a58e1fb8b9eadc Mon Sep 17 00:00:00 2001 From: zihao <497244062@qq.com> Date: Tue, 1 Nov 2022 15:06:00 +0800 Subject: [PATCH 3/4] test: update test update test --- src/_common | 2 +- test/snap/__snapshots__/csr.test.jsx.snap | 1346 ++++++++++++--------- 2 files changed, 774 insertions(+), 574 deletions(-) diff --git a/src/_common b/src/_common index 8ec4d6c78..7da691777 160000 --- a/src/_common +++ b/src/_common @@ -1 +1 @@ -Subproject commit 8ec4d6c786ee2111f4f5cfcb78b267f84dfeaf97 +Subproject commit 7da691777e11bb60344db1b391b29ce58b40a79c diff --git a/test/snap/__snapshots__/csr.test.jsx.snap b/test/snap/__snapshots__/csr.test.jsx.snap index a68de5b8a..d9dc7cfee 100644 --- a/test/snap/__snapshots__/csr.test.jsx.snap +++ b/test/snap/__snapshots__/csr.test.jsx.snap @@ -41085,22 +41085,25 @@ exports[`csr snapshot test > csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
设置默认展开项
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
当前折叠面板折叠时,销毁面板内容
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
嵌套使用折叠面板
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
设置默认展开项
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
当前折叠面板折叠时,销毁面板内容
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
嵌套使用折叠面板
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/base.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/icon.jsx 1`] = `
- - - +
+ + + +
这是一个折叠标题
csr test src/collapse/_example/icon.jsx 1`] = `
- - - + + + +
折叠后自动销毁
csr test src/collapse/_example/icon.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/icon.jsx 1`] = `
+
+
+
+
+ + + +
+ 自定义图标 +
+
+
+
+ 这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。 +
+
+
+
csr test src/collapse/_example/icon.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/icon.jsx 1`] = `
- - - + + + +
折叠后自动销毁
csr test src/collapse/_example/icon.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/icon.jsx 1`] = `
+
+
+
+
+ + + +
+ 自定义图标 +
+
+
+
+ 这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。 +
+
+
+
csr test src/collapse/_example/mutex.jsx 1`] = `
- - - +
+ + + +
这是一个折叠标题
csr test src/collapse/_example/mutex.jsx 1`] = `
- - - + + + +
折叠后自动销毁
csr test src/collapse/_example/mutex.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/mutex.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/mutex.jsx 1`] = `
- - - + + + +
折叠后自动销毁
csr test src/collapse/_example/mutex.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/other.jsx 1`] = `
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/other.jsx 1`] = `
- - - + + + +
折叠后自动销毁
csr test src/collapse/_example/other.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/other.jsx 1`] = ` >
- +
- - + + + +
这是一个折叠标题
csr test src/collapse/_example/other.jsx 1`] = `
- - - + + + +
折叠后自动销毁
csr test src/collapse/_example/other.jsx 1`] = `
- - - + + + +
自定义折叠面板内容
csr test src/collapse/_example/rightSlot.jsx 1`] =
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/rightSlot.jsx 1`] =
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/rightSlot.jsx 1`] =
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/rightSlot.jsx 1`] =
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/rightSlot.jsx 1`] =
- - - + + + +
这是一个折叠标题
csr test src/collapse/_example/rightSlot.jsx 1`] =
- - - + + + +
这是一个折叠标题
Date: Tue, 1 Nov 2022 15:14:21 +0800 Subject: [PATCH 4/4] refactor: update demo update demo --- src/collapse/CollapsePanel.tsx | 4 ++-- src/collapse/_example/icon.jsx | 1 - src/collapse/_example/other.jsx | 11 ++++++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/collapse/CollapsePanel.tsx b/src/collapse/CollapsePanel.tsx index 83371267e..d6558f6f1 100644 --- a/src/collapse/CollapsePanel.tsx +++ b/src/collapse/CollapsePanel.tsx @@ -104,9 +104,9 @@ const CollapsePanel = (props: CollapsePanelProps) => { return (
{expandIconPlacement === 'left' && renderIcon()} - {header && header} + {header}
- {headerRightContent && headerRightContent} + {headerRightContent} {expandIconPlacement === 'right' && renderIcon()}
); diff --git a/src/collapse/_example/icon.jsx b/src/collapse/_example/icon.jsx index 44bcc01d9..bd3a405f4 100644 --- a/src/collapse/_example/icon.jsx +++ b/src/collapse/_example/icon.jsx @@ -10,7 +10,6 @@ export default function CollapseExample() { const options = [ { value: 1, label: '左边' }, { value: 2, label: '右边' }, - { value: 3, label: '不展示' }, ]; return ( diff --git a/src/collapse/_example/other.jsx b/src/collapse/_example/other.jsx index e918601ba..b7c6c3659 100644 --- a/src/collapse/_example/other.jsx +++ b/src/collapse/_example/other.jsx @@ -6,9 +6,10 @@ export default function CollapseExample() { const [collapseValue, setCollapseValue] = useState([]); const [disabledAll, setDisabledAll] = useState(false); const [borderless, setBorderless] = useState(false); + const [showIcon, setShowIcon] = useState(true); return ( - + 这部分是每个折叠面板折叠或展开的内容,可根据不同业务或用户的使用诉求,进行自定义填充。可以是纯文本、图文、子列表等内容形式。 @@ -38,6 +39,14 @@ export default function CollapseExample() { > 无边框模式 + { + setShowIcon(!showIcon); + }} + > + 显示icon +
当前展开的Collapse Panel: {collapseValue.map((item) => `${item} `)}