From 2b9edf7ded45288d92796acbcf949177ede62ab2 Mon Sep 17 00:00:00 2001 From: LuckyFBB <976060700@qq.com> Date: Wed, 6 Mar 2024 20:02:47 +0800 Subject: [PATCH] feat(blockheader): support expand controll and change callname to onExpand --- .../__tests__/blockHeader.test.tsx | 2 +- src/blockHeader/demos/expand.tsx | 24 ++++++--- src/blockHeader/index.md | 3 +- src/blockHeader/index.tsx | 50 ++++++++++++------- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/blockHeader/__tests__/blockHeader.test.tsx b/src/blockHeader/__tests__/blockHeader.test.tsx index fadf2d1a4..f41e04386 100644 --- a/src/blockHeader/__tests__/blockHeader.test.tsx +++ b/src/blockHeader/__tests__/blockHeader.test.tsx @@ -61,7 +61,7 @@ describe('test BlockHeader render', () => { test('should render BlockHeader test click event', () => { const onChange = jest.fn(); const { getByText } = render( - +
1111
); diff --git a/src/blockHeader/demos/expand.tsx b/src/blockHeader/demos/expand.tsx index ba2e77fce..7aae5b7c8 100644 --- a/src/blockHeader/demos/expand.tsx +++ b/src/blockHeader/demos/expand.tsx @@ -1,14 +1,22 @@ -import React from 'react'; +import React, { useState } from 'react'; +import { Space } from 'antd'; import { BlockHeader } from 'dt-react-component'; export default () => { + const [expand, setExpand] = useState(false); return ( - console.log(expand)} - > - Hello World! - + + console.log(expand)} + > + Hello World! + + + setExpand(expand)}> + Hello World! + + ); }; diff --git a/src/blockHeader/index.md b/src/blockHeader/index.md index c2fd25228..13bf79aef 100644 --- a/src/blockHeader/index.md +++ b/src/blockHeader/index.md @@ -37,7 +37,8 @@ demo: | titleClassName | 标题的样式类名 | `string` | - | | showBackground | 是否显示背景 | `boolean` | `true` | | defaultExpand | 是否默认展开内容 | `boolean` | `true` | +| expand | 当前展开状态 | `boolean` | | | hasBottom | 是否有默认下边距 16px | `boolean` | `false` | | spaceBottom | 自定义下边距,优先级高于 hasBottom | `number` | `0` | | children | 展开/收起的内容 | `React.ReactNode` | - | -| onChange | 展开/收起时的回调 | `(expand: boolean) => void` | - | +| onExpand | 展开/收起时的回调 | `(expand: boolean) => void` | - | diff --git a/src/blockHeader/index.tsx b/src/blockHeader/index.tsx index 511de406b..81a4ec567 100644 --- a/src/blockHeader/index.tsx +++ b/src/blockHeader/index.tsx @@ -7,16 +7,20 @@ import './style.scss'; export declare type SizeType = 'small' | 'middle' | undefined; +function isControlled(props: IBlockHeaderProps) { + return props.expand !== undefined; +} + export interface IBlockHeaderProps { - // 标题 + /** 标题 */ title: string; - // 标题前的图标,默认是一个色块 + /** 标题前的图标,默认是一个色块 */ beforeTitle?: ReactNode; - // 标题后的提示图标或文案 + /** 标题后的提示图标或文案 */ afterTitle?: ReactNode; - // 默认展示为问号的tooltip + /** 默认展示为问号的tooltip */ tooltip?: ReactNode; - // 后缀自定义内容块 + /** 后缀自定义内容块 */ addonAfter?: ReactNode; /** * 小标题 font-size: 12px; line-height: 32px @@ -24,19 +28,24 @@ export interface IBlockHeaderProps { * 默认 中标题 */ size?: SizeType; + /** 是否展示 Bottom,默认 false,Bottom 值 16px */ hasBottom?: boolean; + /** 自定义 Bottom 值 */ spaceBottom?: number; - // 标题一行的样式类名 + /** 标题一行的样式类名 */ titleRowClassName?: string; - // 标题的样式类名 + /** 标题的样式类名 */ titleClassName?: string; - // 是否显示背景, 默认 true + /** 是否显示背景, 默认 true */ showBackground?: boolean; - // 是否默认展开内容, 默认 true + /** 当前展开状态 */ + expand?: boolean; + /** 是否默认展开内容, 默认 true */ defaultExpand?: boolean; - // 展开/收起时的回调 - onChange?: (expand: boolean) => void; + /** 展开/收起的内容 */ children?: ReactNode; + /** 展开/收起时的回调 */ + onExpand?: (expand: boolean) => void; } const BlockHeader: React.FC = function (props) { const prefixCls = 'dtc-block-header'; @@ -52,12 +61,15 @@ const BlockHeader: React.FC = function (props) { showBackground = true, defaultExpand = true, addonAfter, + expand, children = '', beforeTitle =
, - onChange, + onExpand, } = props; - const [expand, setExpand] = useState(defaultExpand); + const [internalExpand, setInternalExpand] = useState(defaultExpand); + + const currentExpand = isControlled(props) ? expand : internalExpand; const preTitleRowCls = `${prefixCls}-title-row`; @@ -73,8 +85,8 @@ const BlockHeader: React.FC = function (props) { const handleExpand = (expand: boolean) => { if (!children) return; - setExpand(expand); - onChange?.(expand); + !isControlled(props) && setInternalExpand(expand); + onExpand?.(expand); }; return ( @@ -89,7 +101,7 @@ const BlockHeader: React.FC = function (props) { [`${preTitleRowCls}-pointer`]: children, } )} - onClick={() => handleExpand(!expand)} + onClick={() => handleExpand(!currentExpand)} >
{beforeTitle ? ( @@ -103,13 +115,13 @@ const BlockHeader: React.FC = function (props) { {addonAfter &&
{addonAfter}
} {children && (
-
{expand ? '收起' : '展开'}
- +
{currentExpand ? '收起' : '展开'}
+
)}
-
{children}
+
{children}
); };