Skip to content

Commit 3b6d7fe

Browse files
authored
remove container prop to Tooltip components and add contentWrapperStyle prop (#1292)
* fix: remove container prop from Tooltip * feat(tooltip): add contentWrapperStyle prop * chore(changeset): add changeset
1 parent c778a92 commit 3b6d7fe

File tree

6 files changed

+37
-40
lines changed

6 files changed

+37
-40
lines changed

.changeset/shy-bulldogs-brush.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@channel.io/bezier-react": minor
3+
---
4+
5+
Remove `container` property from `Tooltip` component and add `contentWrapperStyle` property.

packages/bezier-react/src/components/Tooltip/Tooltip.stories.tsx

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react'
1+
import React from 'react'
22

33
import {
44
type Meta,
@@ -79,22 +79,15 @@ const Target = styled.div`
7979
border-radius: 4px;
8080
`
8181

82-
const Template: Story<TooltipProps> = (props) => {
83-
const [container, setContainer] = useState<HTMLDivElement | null>(null)
84-
85-
return (
86-
<div ref={setContainer}>
87-
<Tooltip
88-
{...props}
89-
container={container}
90-
>
91-
<Target>
92-
Target
93-
</Target>
94-
</Tooltip>
95-
</div>
96-
)
97-
}
82+
const Template: Story<TooltipProps> = (props) => (
83+
<Tooltip
84+
{...props}
85+
>
86+
<Target>
87+
Target
88+
</Target>
89+
</Tooltip>
90+
)
9891

9992
export const Primary = Template.bind({})
10093

packages/bezier-react/src/components/Tooltip/Tooltip.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ function Tooltip(
2727
className,
2828
contentClassName,
2929
contentInterpolation,
30+
contentWrapperStyle,
3031
content = null,
3132
lazy = false, // optional prop 에서 추후 default behavior 를 lazy 하게 바꿀 예정
3233
placement = TooltipPosition.BottomCenter,
3334
disabled = false,
3435
offset = 4,
35-
container,
3636
keepInContainer = false,
3737
allowHover = false,
3838
delayShow = 0,
@@ -100,11 +100,11 @@ function Tooltip(
100100
content={content}
101101
contentClassName={contentClassName}
102102
contentInterpolation={contentInterpolation}
103+
contentWrapperStyle={contentWrapperStyle}
103104
disabled={disabled}
104105
placement={placement}
105106
offset={offset}
106107
allowHover={allowHover}
107-
container={container}
108108
keepInContainer={keepInContainer}
109109
tooltipContainer={tooltipContainerRef.current}
110110
forwardedRef={forwardedRef}
@@ -121,11 +121,11 @@ function Tooltip(
121121
content,
122122
contentClassName,
123123
contentInterpolation,
124+
contentWrapperStyle,
124125
disabled,
125126
placement,
126127
offset,
127128
allowHover,
128-
container,
129129
keepInContainer,
130130
forwardedRef,
131131
contentTestId,

packages/bezier-react/src/components/Tooltip/Tooltip.types.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
interface TooltipOptions {
1313
placement?: TooltipPosition
1414
offset?: number
15-
container?: HTMLElement | null
1615
keepInContainer?: boolean
1716
allowHover?: boolean
1817
delayShow?: number
@@ -26,22 +25,21 @@ export default interface TooltipProps extends
2625
ChildrenProps,
2726
ContentProps,
2827
DisableProps,
29-
AdditionalStylableProps<'content'>,
28+
AdditionalStylableProps<'content' | 'contentWrapper'>,
3029
React.HTMLAttributes<HTMLDivElement>,
3130
TooltipOptions {
3231
}
3332

3433
export interface TooltipContentProps extends Pick<
3534
TooltipOptions,
36-
'container' |
3735
'keepInContainer' |
3836
'placement' |
3937
'offset' |
4038
'allowHover'
4139
>,
4240
RenderConfigProps,
4341
ContentProps,
44-
AdditionalStylableProps<'content'>,
42+
AdditionalStylableProps<'content' | 'contentWrapper'>,
4543
DisableProps {
4644
tooltipContainer: HTMLDivElement | null
4745
forwardedRef: Ref<HTMLDivElement>
@@ -51,7 +49,7 @@ export interface GetTooltipStyle extends Required<Pick<TooltipOptions, 'placemen
5149
tooltipContainer: HTMLDivElement
5250
}
5351

54-
export interface GetReplacement extends Required<Pick<TooltipOptions, 'placement' | 'container' | 'keepInContainer'>> {
52+
export interface GetReplacement extends Required<Pick<TooltipOptions, 'placement' | 'keepInContainer'>> {
5553
tooltip: HTMLDivElement
5654
}
5755

packages/bezier-react/src/components/Tooltip/TooltipContent.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ const TooltipContent: React.FC<TooltipContentProps> = ({
8282
content,
8383
contentClassName,
8484
contentInterpolation,
85+
contentWrapperStyle: givenContentWrapperStyle,
8586
disabled = false,
86-
container: givenContainer,
8787
keepInContainer = false,
8888
placement = TooltipPosition.BottomCenter,
8989
tooltipContainer,
@@ -97,8 +97,6 @@ const TooltipContent: React.FC<TooltipContentProps> = ({
9797
const mergedRef = useMergeRefs<HTMLDivElement>(tooltipRef, forwardedRef)
9898
const [replacement, setReplacement] = useState(placement)
9999

100-
const container = givenContainer || getRootElement()
101-
102100
const handleClickTooltip = useCallback((event: HTMLElementEventMap['click']) => {
103101
event.stopPropagation()
104102
}, [])
@@ -109,13 +107,11 @@ const TooltipContent: React.FC<TooltipContentProps> = ({
109107
if (!tooltipRef.current) { return }
110108
const newPlacement = getReplacement({
111109
tooltip: tooltipRef.current,
112-
container,
113110
keepInContainer,
114111
placement,
115112
})
116113
setReplacement(newPlacement)
117114
}, [
118-
container,
119115
keepInContainer,
120116
placement,
121117
])
@@ -124,17 +120,21 @@ const TooltipContent: React.FC<TooltipContentProps> = ({
124120

125121
const contentWrapperStyle = useMemo(() => {
126122
if (tooltipContainer) {
127-
return getTooltipStyle({
128-
tooltipContainer,
129-
placement: replacement,
130-
offset,
131-
allowHover,
132-
})
123+
return {
124+
...givenContentWrapperStyle,
125+
...getTooltipStyle({
126+
tooltipContainer,
127+
placement: replacement,
128+
offset,
129+
allowHover,
130+
}),
131+
}
133132
}
134133

135134
return {}
136135
}, [
137136
tooltipContainer,
137+
givenContentWrapperStyle,
138138
replacement,
139139
offset,
140140
allowHover,
@@ -159,7 +159,7 @@ const TooltipContent: React.FC<TooltipContentProps> = ({
159159
</EllipsisableContent>
160160
</Content>
161161
</ContentWrapper>,
162-
container,
162+
getRootElement(),
163163
)
164164
)
165165
}

packages/bezier-react/src/components/Tooltip/utils.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { getRootElement } from '~/src/utils/domUtils'
2+
13
import {
24
type GetReplacement,
35
type GetTooltipStyle,
@@ -6,11 +8,10 @@ import {
68

79
export function getReplacement({
810
tooltip,
9-
container,
1011
keepInContainer,
1112
placement,
1213
}: GetReplacement): TooltipPosition {
13-
if (!keepInContainer || !container) {
14+
if (!keepInContainer) {
1415
return placement
1516
}
1617

@@ -26,7 +27,7 @@ export function getReplacement({
2627
height: rootHeight,
2728
top: rootTop,
2829
left: rootLeft,
29-
} = container.getBoundingClientRect()
30+
} = getRootElement().getBoundingClientRect()
3031

3132
const isOverTop = tooltipTop < rootTop
3233
const isOverBottom = tooltipTop + tooltipHeight > rootTop + rootHeight

0 commit comments

Comments
 (0)