Skip to content

Commit a8d49af

Browse files
feat: closeOnEsc prop
1 parent bd89e89 commit a8d49af

File tree

4 files changed

+23
-2
lines changed

4 files changed

+23
-2
lines changed

src/components/Tooltip/Tooltip.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const Tooltip = ({
2626
float = false,
2727
noArrow = false,
2828
clickable = false,
29+
closeOnEsc = false,
2930
style: externalStyles,
3031
position,
3132
afterShow,
@@ -190,6 +191,13 @@ const Tooltip = ({
190191
handleShow(false)
191192
}
192193

194+
const handleEsc = (event: KeyboardEvent) => {
195+
if (event.key !== 'Escape') {
196+
return
197+
}
198+
handleShow(false)
199+
}
200+
193201
// debounce handler to prevent call twice when
194202
// mouse enter and focus events being triggered toggether
195203
const debouncedHandleShowTooltip = debounce(handleShowTooltip, 50)
@@ -210,6 +218,10 @@ const Tooltip = ({
210218
return () => null
211219
}
212220

221+
if (closeOnEsc) {
222+
window.addEventListener('keydown', handleEsc)
223+
}
224+
213225
const enabledEvents: { event: string; listener: (event?: Event) => void }[] = []
214226

215227
if (events.find((event: string) => event === 'click')) {
@@ -252,7 +264,12 @@ const Tooltip = ({
252264
})
253265

254266
return () => {
255-
window.removeEventListener('click', handleClickOutsideAnchor)
267+
if (events.find((event: string) => event === 'click')) {
268+
window.removeEventListener('click', handleClickOutsideAnchor)
269+
}
270+
if (closeOnEsc) {
271+
window.removeEventListener('keydown', handleEsc)
272+
}
256273
if (clickable) {
257274
tooltipRef.current?.removeEventListener('mouseenter', handleMouseEnterTooltip)
258275
tooltipRef.current?.removeEventListener('mouseleave', handleMouseLeaveTooltip)
@@ -263,7 +280,7 @@ const Tooltip = ({
263280
})
264281
})
265282
}
266-
}, [anchorRefs, activeAnchor, anchorId, events, delayHide, delayShow])
283+
}, [anchorRefs, activeAnchor, closeOnEsc, anchorId, events, delayHide, delayShow])
267284

268285
useEffect(() => {
269286
if (position) {

src/components/Tooltip/TooltipTypes.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export interface ITooltip {
5353
float?: boolean
5454
noArrow?: boolean
5555
clickable?: boolean
56+
closeOnEsc?: boolean
5657
style?: CSSProperties
5758
position?: IPosition
5859
isOpen?: boolean

src/components/TooltipController/TooltipController.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const TooltipController = ({
3232
float = false,
3333
noArrow = false,
3434
clickable = false,
35+
closeOnEsc = false,
3536
style,
3637
position,
3738
isOpen,
@@ -187,6 +188,7 @@ const TooltipController = ({
187188
float: tooltipFloat,
188189
noArrow,
189190
clickable,
191+
closeOnEsc,
190192
style,
191193
position,
192194
isOpen,

src/components/TooltipController/TooltipControllerTypes.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface ITooltipController {
3131
float?: boolean
3232
noArrow?: boolean
3333
clickable?: boolean
34+
closeOnEsc?: boolean
3435
style?: CSSProperties
3536
position?: IPosition
3637
isOpen?: boolean

0 commit comments

Comments
 (0)