Skip to content

Commit a19203b

Browse files
feat: expose tooltip placement with classname
1 parent 92bed21 commit a19203b

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/components/Tooltip/Tooltip.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { useTooltip } from 'components/TooltipProvider'
66
import useIsomorphicLayoutEffect from 'utils/use-isomorphic-layout-effect'
77
import { computeTooltipPosition } from '../../utils/compute-positions'
88
import styles from './styles.module.css'
9-
import type { IPosition, ITooltip } from './TooltipTypes'
9+
import type { IPosition, ITooltip, PlacesType } from './TooltipTypes'
1010

1111
const Tooltip = ({
1212
// props
@@ -45,6 +45,7 @@ const Tooltip = ({
4545
const tooltipArrowRef = useRef<HTMLElement>(null)
4646
const tooltipShowDelayTimerRef = useRef<NodeJS.Timeout | null>(null)
4747
const tooltipHideDelayTimerRef = useRef<NodeJS.Timeout | null>(null)
48+
const [actualPlacement, setActualPlacement] = useState(place)
4849
const [inlineStyles, setInlineStyles] = useState({})
4950
const [inlineArrowStyles, setInlineArrowStyles] = useState({})
5051
const [show, setShow] = useState(false)
@@ -228,6 +229,7 @@ const Tooltip = ({
228229
if (Object.keys(computedStylesData.tooltipArrowStyles).length) {
229230
setInlineArrowStyles(computedStylesData.tooltipArrowStyles)
230231
}
232+
setActualPlacement(computedStylesData.place as PlacesType)
231233
})
232234
}
233235

@@ -465,6 +467,7 @@ const Tooltip = ({
465467
if (Object.keys(computedStylesData.tooltipArrowStyles).length) {
466468
setInlineArrowStyles(computedStylesData.tooltipArrowStyles)
467469
}
470+
setActualPlacement(computedStylesData.place as PlacesType)
468471
})
469472
}, [show, activeAnchor, content, html, place, offset, positionStrategy, position])
470473

@@ -520,6 +523,10 @@ const Tooltip = ({
520523
[styles['show']]: canShow,
521524
[styles['fixed']]: positionStrategy === 'fixed',
522525
[styles['clickable']]: clickable,
526+
'react-tooltip__place-top': actualPlacement === 'top',
527+
'react-tooltip__place-right': actualPlacement === 'right',
528+
'react-tooltip__place-bottom': actualPlacement === 'bottom',
529+
'react-tooltip__place-left': actualPlacement === 'left',
523530
})}
524531
style={{ ...externalStyles, ...inlineStyles }}
525532
ref={tooltipRef}

src/utils/compute-positions.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ export const computeTooltipPosition = async ({
1414
// elementReference can be null or undefined and we will not compute the position
1515
// eslint-disable-next-line no-console
1616
// console.error('The reference element for tooltip was not defined: ', elementReference)
17-
return { tooltipStyles: {}, tooltipArrowStyles: {} }
17+
return { tooltipStyles: {}, tooltipArrowStyles: {}, place }
1818
}
1919

2020
if (tooltipReference === null) {
21-
return { tooltipStyles: {}, tooltipArrowStyles: {} }
21+
return { tooltipStyles: {}, tooltipArrowStyles: {}, place }
2222
}
2323

2424
const middleware = middlewares
@@ -51,17 +51,17 @@ export const computeTooltipPosition = async ({
5151
[staticSide]: '-4px',
5252
}
5353

54-
return { tooltipStyles: styles, tooltipArrowStyles: arrowStyle }
54+
return { tooltipStyles: styles, tooltipArrowStyles: arrowStyle, place: placement }
5555
})
5656
}
5757

5858
return computePosition(elementReference as HTMLElement, tooltipReference as HTMLElement, {
5959
placement: 'bottom',
6060
strategy,
6161
middleware,
62-
}).then(({ x, y }) => {
62+
}).then(({ x, y, placement }) => {
6363
const styles = { left: `${x}px`, top: `${y}px` }
6464

65-
return { tooltipStyles: styles, tooltipArrowStyles: {} }
65+
return { tooltipStyles: styles, tooltipArrowStyles: {}, place: placement }
6666
})
6767
}

0 commit comments

Comments
 (0)