Skip to content

Commit 25d6b06

Browse files
authored
feat: support to config overlay inner style (#213)
* feat: support to config overlay inner style * patch: add test case
1 parent 19c4244 commit 25d6b06

File tree

5 files changed

+51
-3
lines changed

5 files changed

+51
-3
lines changed

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,12 @@ Online examples: <https://react-component.github.io/tooltip/examples/>
168168
<td></td>
169169
<td>popup content</td>
170170
</tr>
171+
<tr>
172+
<td>overlayInnerStyle</td>
173+
<td>Object</td>
174+
<td></td>
175+
<td>set overlay inner style</td>
176+
</tr>
171177
<tr>
172178
<td>arrowContent</td>
173179
<td>React.Node</td>

examples/simple.js

+17
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class Test extends Component {
2626
},
2727
offsetX: placements.right.offset[0],
2828
offsetY: placements.right.offset[1],
29+
overlayInnerStyle: undefined,
2930
};
3031

3132
onPlacementChange = e => {
@@ -81,6 +82,12 @@ class Test extends Component {
8182
});
8283
};
8384

85+
onOverlayInnerStyleChange = () => {
86+
this.setState(prevState => ({
87+
overlayInnerStyle: prevState.overlayInnerStyle ? undefined : { background: 'red' },
88+
}));
89+
};
90+
8491
preventDefault = e => {
8592
e.preventDefault();
8693
};
@@ -170,6 +177,15 @@ class Test extends Component {
170177
style={{ width: 50 }}
171178
/>
172179
</label>
180+
<label>
181+
<input
182+
value="overlayInnerStyle"
183+
checked={!!state.overlayInnerStyle}
184+
type="checkbox"
185+
onChange={this.onOverlayInnerStyleChange}
186+
/>
187+
overlayInnerStyle(red background)
188+
</label>
173189
</div>
174190
<div style={{ margin: 100 }}>
175191
<Tooltip
@@ -184,6 +200,7 @@ class Test extends Component {
184200
offset: [this.state.offsetX, this.state.offsetY],
185201
}}
186202
transitionName={this.state.transitionName}
203+
overlayInnerStyle={state.overlayInnerStyle}
187204
>
188205
<div style={{ height: 100, width: 100, border: '1px solid red' }}>trigger</div>
189206
</Tooltip>

src/Content.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ export interface ContentProps {
44
prefixCls?: string;
55
overlay: (() => React.ReactNode) | React.ReactNode;
66
id: string;
7+
overlayInnerStyle?: React.CSSProperties;
78
}
89

910
const Content = (props: ContentProps) => {
10-
const { overlay, prefixCls, id } = props;
11+
const { overlay, prefixCls, id, overlayInnerStyle } = props;
1112

1213
return (
13-
<div className={`${prefixCls}-inner`} id={id} role="tooltip">
14+
<div className={`${prefixCls}-inner`} id={id} role="tooltip" style={overlayInnerStyle}>
1415
{typeof overlay === 'function' ? overlay() : overlay}
1516
</div>
1617
);

src/Tooltip.tsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export interface TooltipProps extends Pick<TriggerProps, 'onPopupAlign' | 'built
3030
id?: string;
3131
children?: React.ReactElement;
3232
popupVisible?: boolean;
33+
overlayInnerStyle?: React.CSSProperties;
3334
}
3435

3536
const Tooltip = (props: TooltipProps, ref) => {
@@ -50,6 +51,7 @@ const Tooltip = (props: TooltipProps, ref) => {
5051
destroyTooltipOnHide = false,
5152
defaultVisible,
5253
getTooltipContainer,
54+
overlayInnerStyle,
5355
...restProps
5456
} = props;
5557

@@ -67,7 +69,13 @@ const Tooltip = (props: TooltipProps, ref) => {
6769
<div className={`${prefixCls}-arrow`} key="arrow">
6870
{arrowContent}
6971
</div>,
70-
<Content key="content" prefixCls={prefixCls} id={id} overlay={overlay} />,
72+
<Content
73+
key="content"
74+
prefixCls={prefixCls}
75+
id={id}
76+
overlay={overlay}
77+
overlayInnerStyle={overlayInnerStyle}
78+
/>,
7179
];
7280
};
7381

tests/index.test.js

+16
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,22 @@ describe('rc-tooltip', () => {
4949
verifyContent(wrapper, 'Tooltip content');
5050
});
5151

52+
// https://github.com/ant-design/ant-design/pull/23155
53+
it('using style inner style', () => {
54+
const wrapper = mount(
55+
<Tooltip
56+
trigger={['click']}
57+
placement="left"
58+
overlay={() => <strong className="x-content">Tooltip content</strong>}
59+
overlayInnerStyle={{ background: 'red' }}
60+
>
61+
<div className="target">Click this</div>
62+
</Tooltip>,
63+
);
64+
wrapper.find('.target').simulate('click');
65+
expect(wrapper.find('.rc-tooltip-inner').props().style).toEqual({ background: 'red' });
66+
});
67+
5268
it('access of ref', () => {
5369
const domRef = React.createRef();
5470
mount(

0 commit comments

Comments
 (0)