From 2e21ef212c23e277e903304a96698d37540d19f9 Mon Sep 17 00:00:00 2001 From: gabrieljablonski Date: Mon, 6 Mar 2023 17:43:24 -0300 Subject: [PATCH 1/4] feat: expose tooltip placement with classname --- src/components/Tooltip/Tooltip.tsx | 9 ++++++++- src/utils/compute-positions.ts | 10 +++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/components/Tooltip/Tooltip.tsx b/src/components/Tooltip/Tooltip.tsx index 5f568040..67c62c5c 100644 --- a/src/components/Tooltip/Tooltip.tsx +++ b/src/components/Tooltip/Tooltip.tsx @@ -6,7 +6,7 @@ import { useTooltip } from 'components/TooltipProvider' import useIsomorphicLayoutEffect from 'utils/use-isomorphic-layout-effect' import { computeTooltipPosition } from '../../utils/compute-positions' import styles from './styles.module.css' -import type { IPosition, ITooltip } from './TooltipTypes' +import type { IPosition, ITooltip, PlacesType } from './TooltipTypes' const Tooltip = ({ // props @@ -45,6 +45,7 @@ const Tooltip = ({ const tooltipArrowRef = useRef(null) const tooltipShowDelayTimerRef = useRef(null) const tooltipHideDelayTimerRef = useRef(null) + const [actualPlacement, setActualPlacement] = useState(place) const [inlineStyles, setInlineStyles] = useState({}) const [inlineArrowStyles, setInlineArrowStyles] = useState({}) const [show, setShow] = useState(false) @@ -228,6 +229,7 @@ const Tooltip = ({ if (Object.keys(computedStylesData.tooltipArrowStyles).length) { setInlineArrowStyles(computedStylesData.tooltipArrowStyles) } + setActualPlacement(computedStylesData.place as PlacesType) }) } @@ -465,6 +467,7 @@ const Tooltip = ({ if (Object.keys(computedStylesData.tooltipArrowStyles).length) { setInlineArrowStyles(computedStylesData.tooltipArrowStyles) } + setActualPlacement(computedStylesData.place as PlacesType) }) }, [show, activeAnchor, content, html, place, offset, positionStrategy, position]) @@ -520,6 +523,10 @@ const Tooltip = ({ [styles['show']]: canShow, [styles['fixed']]: positionStrategy === 'fixed', [styles['clickable']]: clickable, + 'react-tooltip__place-top': actualPlacement === 'top', + 'react-tooltip__place-right': actualPlacement === 'right', + 'react-tooltip__place-bottom': actualPlacement === 'bottom', + 'react-tooltip__place-left': actualPlacement === 'left', })} style={{ ...externalStyles, ...inlineStyles }} ref={tooltipRef} diff --git a/src/utils/compute-positions.ts b/src/utils/compute-positions.ts index c978b280..78c71138 100644 --- a/src/utils/compute-positions.ts +++ b/src/utils/compute-positions.ts @@ -14,11 +14,11 @@ export const computeTooltipPosition = async ({ // elementReference can be null or undefined and we will not compute the position // eslint-disable-next-line no-console // console.error('The reference element for tooltip was not defined: ', elementReference) - return { tooltipStyles: {}, tooltipArrowStyles: {} } + return { tooltipStyles: {}, tooltipArrowStyles: {}, place } } if (tooltipReference === null) { - return { tooltipStyles: {}, tooltipArrowStyles: {} } + return { tooltipStyles: {}, tooltipArrowStyles: {}, place } } const middleware = middlewares @@ -51,7 +51,7 @@ export const computeTooltipPosition = async ({ [staticSide]: '-4px', } - return { tooltipStyles: styles, tooltipArrowStyles: arrowStyle } + return { tooltipStyles: styles, tooltipArrowStyles: arrowStyle, place: placement } }) } @@ -59,9 +59,9 @@ export const computeTooltipPosition = async ({ placement: 'bottom', strategy, middleware, - }).then(({ x, y }) => { + }).then(({ x, y, placement }) => { const styles = { left: `${x}px`, top: `${y}px` } - return { tooltipStyles: styles, tooltipArrowStyles: {} } + return { tooltipStyles: styles, tooltipArrowStyles: {}, place: placement } }) } From 7268d19bb90902fd17005ddbbe727e2ac20c426a Mon Sep 17 00:00:00 2001 From: gabrieljablonski Date: Mon, 6 Mar 2023 17:52:00 -0300 Subject: [PATCH 2/4] test: update ss and add `place` to expected object --- .../__snapshots__/tooltip-attributes.spec.js.snap | 4 ++-- src/test/__snapshots__/tooltip-props.spec.js.snap | 14 +++++++------- src/test/utils.spec.js | 6 ++++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/test/__snapshots__/tooltip-attributes.spec.js.snap b/src/test/__snapshots__/tooltip-attributes.spec.js.snap index 848cdcf6..15c3ba94 100644 --- a/src/test/__snapshots__/tooltip-attributes.spec.js.snap +++ b/src/test/__snapshots__/tooltip-attributes.spec.js.snap @@ -9,7 +9,7 @@ exports[`tooltip attributes basic tooltip 1`] = ` Lorem Ipsum