import React, { useContext } from 'react'; import { Space, ConfigProvider } from 'antd'; import { RightOutlined } from '@ant-design/icons'; import FieldContext from '../../FieldContext'; import type { GroupProps } from '../../interface'; import './index.less'; import { LabelIconTip, useMountMergeState } from '@ant-design/pro-utils'; import classNames from 'classnames'; const Group: React.FC = React.forwardRef((props, ref: any) => { const { groupProps } = React.useContext(FieldContext); const { children, collapsible, defaultCollapsed, style, labelLayout, title = props.label, tooltip, align, direction, size = 32, titleStyle, titleRender, extra, } = { ...groupProps, ...props, }; const [collapsed, setCollapsed] = useMountMergeState(() => defaultCollapsed || false, { value: props.collapsed, onChange: props.onCollapse, }); const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); const className = getPrefixCls('pro-form-group'); const collapsibleButton = collapsible && ( ); const label = ( {collapsibleButton} {title} ) : ( title ) } tooltip={tooltip} /> ); const titleDom = titleRender ? titleRender(label, props) : label; const renderChild = React.Children.toArray(children).map((element) => { if (React.isValidElement(element) && element?.props?.hidden) { return null; } return element; }); return (
{(title || tooltip || extra) && (
{ setCollapsed(!collapsed); }} > {extra ? (
{titleDom} e.stopPropagation()}>{extra}
) : ( titleDom )}
)} {collapsible && collapsed ? null : ( {renderChild} )}
); }); Group.displayName = 'ProForm-Group'; export default Group;