Skip to content

Commit 9ae4fe7

Browse files
authored
fix(Tooltip): warnings pop up due to arrowProps passed into TooltipBox (#282)
2 parents 57916ec + c535b54 commit 9ae4fe7

File tree

4 files changed

+3
-68
lines changed

4 files changed

+3
-68
lines changed

src/Overlay/Overlay.tsx

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import classNames from 'classnames';
44
import PropTypes from 'prop-types';
55
import BaseOverlay, {
66
OverlayProps as BaseOverlayProps,
7-
OverlayArrowProps,
87
} from '@restart/ui/Overlay';
98
//@ts-ignore
109
import { componentOrElement, elementType } from 'prop-types-extra';
@@ -19,9 +18,6 @@ export interface OverlayInjectedProps {
1918
ref: React.RefCallback<HTMLElement>;
2019
style: React.CSSProperties;
2120
'aria-labelledby'?: string;
22-
23-
arrowProps: Partial<OverlayArrowProps>;
24-
2521
show: boolean;
2622
placement: Placement | undefined;
2723
popper: {
@@ -149,13 +145,10 @@ const defaultProps: Partial<OverlayProps> = {
149145
placement: 'top',
150146
};
151147

152-
function wrapRefs(props: any, arrowProps : any) {
148+
function wrapRefs(props: any) {
153149
const { ref } = props;
154-
const { ref: aRef } = arrowProps;
155150

156151
props.ref = ref.__wrapped || (ref.__wrapped = (r:any) => ref(safeFindDOMNode(r)));
157-
arrowProps.ref =
158-
aRef.__wrapped || (aRef.__wrapped = (r:any) => aRef(safeFindDOMNode(r)));
159152
}
160153

161154
const Overlay = React.forwardRef<HTMLElement, OverlayProps>(
@@ -182,8 +175,8 @@ const Overlay = React.forwardRef<HTMLElement, OverlayProps>(
182175
//@ts-ignore
183176
transition={actualTransition}
184177
>
185-
{(overlayProps, { arrowProps, popper: popperObj, show }) => {
186-
wrapRefs(overlayProps, arrowProps);
178+
{(overlayProps, { popper: popperObj, show }) => {
179+
wrapRefs(overlayProps);
187180
// Need to get placement from popper object, handling case when overlay is flipped using 'flip' prop
188181
const updatedPlacement = popperObj?.placement;
189182
const popper = Object.assign(popperRef.current, {
@@ -201,13 +194,11 @@ const Overlay = React.forwardRef<HTMLElement, OverlayProps>(
201194
show,
202195
...(!transition && show && { className: 'show' }),
203196
popper,
204-
arrowProps,
205197
});
206198

207199
return React.cloneElement(overlay as React.ReactElement, {
208200
...overlayProps,
209201
placement: updatedPlacement,
210-
arrowProps,
211202
popper,
212203
className: classNames(
213204
(overlay as React.ReactElement).props.className,

src/Popover/Popover.tsx

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import classNames from 'classnames';
22
import * as React from 'react';
3-
import { OverlayArrowProps } from '@restart/ui/Overlay';
43
import { useBootstrapPrefix, useIsRTL } from '../ThemeProvider/ThemeProvider';
54
import PopoverHeader from './PopoverHeader';
65
import PopoverBody from './PopoverBody';
@@ -13,11 +12,9 @@ export interface PopoverProps
1312
BsPrefixProps {
1413
placement?: Placement;
1514
title?: string;
16-
arrowProps?: Partial<OverlayArrowProps>;
1715
body?: boolean;
1816
popper?: any;
1917
show?: boolean;
20-
hasArrow?: boolean;
2118
}
2219

2320
const propTypes = {
@@ -55,17 +52,6 @@ const propTypes = {
5552
'left',
5653
'left-start',
5754
]),
58-
59-
/**
60-
* An Overlay injected set of props for positioning the popover arrow.
61-
*
62-
* > This is generally provided by the `Overlay` component positioning the popover
63-
*/
64-
arrowProps: PropTypes.shape({
65-
ref: PropTypes.any,
66-
style: PropTypes.object,
67-
}),
68-
6955
/**
7056
* When this prop is set, it creates a Popover with a Popover.Body inside
7157
* passing the children directly to it
@@ -77,7 +63,6 @@ const propTypes = {
7763

7864
/** @private */
7965
show: PropTypes.bool,
80-
hasArrow: PropTypes.bool,
8166
};
8267

8368
const defaultProps: Partial<PopoverProps> = {
@@ -93,8 +78,6 @@ const Popover = React.forwardRef<HTMLDivElement, PopoverProps>(
9378
style,
9479
children,
9580
body,
96-
arrowProps,
97-
hasArrow = false,
9881
popper: _,
9982
show: _1,
10083
...props
@@ -119,7 +102,6 @@ const Popover = React.forwardRef<HTMLDivElement, PopoverProps>(
119102
)}
120103
{...props}
121104
>
122-
{hasArrow && <div className="popover-arrow" {...arrowProps} />}
123105
<> {children}</>
124106
</div>
125107
);

src/Tooltip/TooltipBox.tsx

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,6 @@ const propTypes = {
4848
'left',
4949
'left-start',
5050
]),
51-
52-
/**
53-
* An Overlay injected set of props for positioning the tooltip arrow.
54-
*
55-
* > This is generally provided by the `Overlay` component positioning the tooltip
56-
*
57-
* @type {{ ref: ReactRef, style: Object }}
58-
*/
59-
arrowProps: PropTypes.shape({
60-
ref: PropTypes.any,
61-
style: PropTypes.object,
62-
}),
63-
6451
/** @private */
6552
popper: PropTypes.object,
6653

tests/Popover/Popover.test.tsx

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,32 +21,7 @@ describe('Popover', () => {
2121
expect(popoverElem.classList).toContain('popover');
2222
expect(popoverElem.classList).toContain('bs-popover-end');
2323

24-
expect(popoverFirstElem.classList).not.toContain('popover-arrow');
2524
expect(popoverFirstElem.classList).toContain('popover-header');
2625
expect(popoverSecondElem.classList).toContain('popover-body');
2726
});
28-
29-
it('should render popover arrow when hasArrow propr is false', () => {
30-
const { getByTestId } = render(
31-
<Popover data-testid="test" id="test-popover" hasArrow>
32-
<Popover.Header>Popover title</Popover.Header>
33-
<Popover.Body>
34-
<strong>Popover Content</strong>
35-
</Popover.Body>
36-
</Popover>
37-
);
38-
const popoverElem = getByTestId('test');
39-
const popoverArrowElem = popoverElem.children[0]!;
40-
const popoverHeaderElem = popoverElem.children[1]!;
41-
const popoverBodyElem = popoverElem.children[2]!;
42-
43-
expect(popoverElem.getAttribute('x-placement')).toEqual('right');
44-
expect(popoverElem.getAttribute('role')).toEqual('tooltip');
45-
expect(popoverElem.classList).toContain('popover');
46-
expect(popoverElem.classList).toContain('bs-popover-end');
47-
48-
expect(popoverArrowElem.classList).toContain('popover-arrow');
49-
expect(popoverHeaderElem.classList).toContain('popover-header');
50-
expect(popoverBodyElem.classList).toContain('popover-body');
51-
});
5227
});

0 commit comments

Comments
 (0)