diff --git a/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap index fc7117bc39..2a13f31171 100644 --- a/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/segmented/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`renders components/segmented/demo/basic.tsx extend context correctly 1`] = `
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
), value: 'user1', + tooltip: { title: 'hello user1', color: 'gold' }, }, { label: ( @@ -23,6 +24,7 @@ const App: React.FC = () => ( ), value: 'user2', + tooltip: { title: 'hello user2', color: 'pink' }, }, { label: ( @@ -32,6 +34,7 @@ const App: React.FC = () => ( ), value: 'user3', + tooltip: { title: 'hello user3', color: 'geekblue' }, }, ]} /> diff --git a/components/segmented/index.en-US.md b/components/segmented/index.en-US.md index 9bf05ff2e6..681f1dfd66 100644 --- a/components/segmented/index.en-US.md +++ b/components/segmented/index.en-US.md @@ -57,13 +57,14 @@ Common props ref:[Common props](/docs/react/common-props) ### SegmentedItemType -| Property | Description | Type | Default | Version | -| --------- | -------------------------------- | ---------------- | ------- | ------- | -| label | Display text for Segmented item | ReactNode | - | | -| value | Value for Segmented item | string \| number | - | | -| icon | Display icon for Segmented item | ReactNode | - | | -| disabled | Disabled state of segmented item | boolean | false | | -| className | The additional css class | string | - | | +| Property | Description | Type | Default | Version | +| --- | --- | --- | --- | --- | +| disabled | Disabled state of segmented item | boolean | false | | +| className | The additional css class | string | - | | +| icon | Display icon for Segmented item | ReactNode | - | | +| label | Display text for Segmented item | ReactNode | - | | +| tooltip | tooltip for Segmented item | string \| [TooltipProps](../tooltip/index.en-US.md#api) | - | | +| value | Value for Segmented item | string \| number | - | | ## Semantic DOM diff --git a/components/segmented/index.tsx b/components/segmented/index.tsx index 798534cd04..9d8ede204a 100644 --- a/components/segmented/index.tsx +++ b/components/segmented/index.tsx @@ -7,6 +7,7 @@ import type { } from '@rc-component/segmented'; import RcSegmented from '@rc-component/segmented'; import useId from '@rc-component/util/lib/hooks/useId'; +import { Tooltip, TooltipProps } from 'antd'; import classNames from 'classnames'; import useOrientation from '../_util/hooks/useOrientation'; @@ -18,9 +19,11 @@ import useStyle from './style'; export type { SegmentedValue } from '@rc-component/segmented'; export type SemanticName = 'root' | 'icon' | 'label' | 'item'; + interface SegmentedLabeledOptionWithoutIcon extends RcSegmentedLabeledOption { label: RcSegmentedLabeledOption['label']; + tooltip?: string | Omit; } interface SegmentedLabeledOptionWithIcon @@ -28,6 +31,7 @@ interface SegmentedLabeledOptionWithIcon label?: RcSegmentedLabeledOption['label']; /** Set icon for Segmented item */ icon: React.ReactNode; + tooltip?: string | Omit; } function isSegmentedLabeledOptionWithIcon( @@ -43,7 +47,7 @@ export type SegmentedLabeledOption = export type SegmentedOptions = (T | SegmentedLabeledOption)[]; export interface SegmentedProps - extends Omit, 'size' | 'options'> { + extends Omit, 'size' | 'options' | 'itemRender'> { rootClassName?: string; options: SegmentedOptions; /** Option to fit width to its parent's width */ @@ -59,7 +63,6 @@ export interface SegmentedProps const InternalSegmented = React.forwardRef((props, ref) => { const defaultName = useId(); - const { prefixCls: customizePrefixCls, className, @@ -151,6 +154,16 @@ const InternalSegmented = React.forwardRef((prop ...style, }; + const itemRender = (node: React.ReactNode, { item }: { item: SegmentedLabeledOption }) => { + if (!item.tooltip) { + return node; + } + + const tooltipProps: TooltipProps = + typeof item.tooltip === 'object' ? item.tooltip : { title: item.tooltip }; + return {node}; + }; + return ( ((prop item: { ...contextStyles.item, ...styles?.item }, label: { ...contextStyles.label, ...styles?.label }, }} + itemRender={itemRender} options={extendedOptions} ref={ref} prefixCls={prefixCls} diff --git a/components/segmented/index.zh-CN.md b/components/segmented/index.zh-CN.md index ca3df294e7..926e0fb71e 100644 --- a/components/segmented/index.zh-CN.md +++ b/components/segmented/index.zh-CN.md @@ -60,13 +60,14 @@ demo: ### SegmentedItemType -| 属性 | 描述 | 类型 | 默认值 | 版本 | -| --------- | ---------------- | ---------------- | ------ | ---- | -| label | 分段项的显示文本 | ReactNode | - | | -| value | 分段项的值 | string \| number | - | | -| icon | 分段项的显示图标 | ReactNode | - | | -| disabled | 分段项的禁用状态 | boolean | false | | -| className | 自定义类名 | string | - | | +| 属性 | 描述 | 类型 | 默认值 | 版本 | +| --- | --- | --- | --- | --- | +| className | 自定义类名 | string | - | | +| disabled | 分段项的禁用状态 | boolean | false | | +| icon | 分段项的显示图标 | ReactNode | - | | +| label | 分段项的显示文本 | ReactNode | - | | +| tooltip | 分段项的工具提示 | string \| [TooltipProps](../tooltip/index.zh-CN.md#api) | - | | +| value | 分段项的值 | string \| number | - | | ## Semantic DOM diff --git a/package.json b/package.json index 243dc7a20f..ba3a1729b3 100644 --- a/package.json +++ b/package.json @@ -133,7 +133,7 @@ "@rc-component/progress": "~1.0.1", "@rc-component/qrcode": "~1.0.0", "@rc-component/resize-observer": "^1.0.0", - "@rc-component/segmented": "~1.1.0", + "@rc-component/segmented": "~1.2.1", "@rc-component/select": "~1.1.2", "@rc-component/steps": "~1.2.1", "@rc-component/switch": "~1.0.0",