Skip to content

Commit 09c80c5

Browse files
fix: review
1 parent e6a662b commit 09c80c5

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

src/components/VersionsBar/VersionsBar.tsx

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22

33
import {Button, Flex, Tooltip} from '@gravity-ui/uikit';
4+
import {debounce} from 'lodash';
45

56
import {cn} from '../../utils/cn';
67
import type {PreparedVersion} from '../../utils/versions/types';
@@ -15,6 +16,9 @@ const TRUNCATION_THRESHOLD = 4;
1516
// One more line for Show more / Hide button
1617
const MAX_DISPLAYED_VERSIONS = TRUNCATION_THRESHOLD - 1;
1718

19+
const HOVER_DELAY = 200;
20+
const TOOLTIP_OPEN_DELAY = 200;
21+
1822
interface VersionsBarProps {
1923
preparedVersions: PreparedVersion[];
2024
}
@@ -60,31 +64,39 @@ export function VersionsBar({preparedVersions}: VersionsBarProps) {
6064
};
6165

6266
const renderButton = () => {
63-
if (shouldTruncateVersions) {
64-
const truncatedVersionsCount = preparedVersions.length - MAX_DISPLAYED_VERSIONS;
65-
66-
if (allVersionsDisplayed) {
67-
return (
68-
<Button view="flat-secondary" size={'s'} onClick={handleHideAllVersions}>
69-
{i18n('action_hide', {
70-
count: truncatedVersionsCount,
71-
})}
72-
</Button>
73-
);
74-
} else {
75-
return (
76-
<Button view="flat-secondary" size={'s'} onClick={handleShowAllVersions}>
77-
{i18n('action_show_more', {
78-
count: truncatedVersionsCount,
79-
})}
80-
</Button>
81-
);
82-
}
67+
if (!shouldTruncateVersions) {
68+
return null;
69+
}
70+
71+
const truncatedVersionsCount = preparedVersions.length - MAX_DISPLAYED_VERSIONS;
72+
73+
if (allVersionsDisplayed) {
74+
return (
75+
<Button view="flat-secondary" size={'s'} onClick={handleHideAllVersions}>
76+
{i18n('action_hide', {
77+
count: truncatedVersionsCount,
78+
})}
79+
</Button>
80+
);
81+
} else {
82+
return (
83+
<Button view="flat-secondary" size={'s'} onClick={handleShowAllVersions}>
84+
{i18n('action_show_more', {
85+
count: truncatedVersionsCount,
86+
})}
87+
</Button>
88+
);
8389
}
84-
return null;
8590
};
8691

92+
const handleMouseEnter = React.useMemo(() => {
93+
return debounce((version: string) => {
94+
setHoveredVersion(version);
95+
}, HOVER_DELAY);
96+
}, []);
97+
8798
const handleMouseLeave = () => {
99+
handleMouseEnter.cancel();
88100
setHoveredVersion(undefined);
89101
};
90102

@@ -106,11 +118,11 @@ export function VersionsBar({preparedVersions}: VersionsBarProps) {
106118
</React.Fragment>
107119
}
108120
placement={'top-start'}
109-
openDelay={100}
121+
openDelay={TOOLTIP_OPEN_DELAY}
110122
>
111123
<span
112124
onMouseEnter={() => {
113-
setHoveredVersion(item.version);
125+
handleMouseEnter(item.version);
114126
}}
115127
onMouseLeave={handleMouseLeave}
116128
className={b('version', {dimmed: isDimmed(item.version)})}
@@ -126,7 +138,7 @@ export function VersionsBar({preparedVersions}: VersionsBarProps) {
126138
key={item.version}
127139
content={i18n('tooltip_nodes', {count: item.count})}
128140
placement={'bottom-end'}
129-
openDelay={100}
141+
openDelay={TOOLTIP_OPEN_DELAY}
130142
>
131143
<Flex gap={1} alignItems={'center'} className={b('titles-wrapper')}>
132144
<svg
@@ -142,7 +154,7 @@ export function VersionsBar({preparedVersions}: VersionsBarProps) {
142154
<div
143155
className={b('title', {dimmed: isDimmed(item.version)})}
144156
onMouseEnter={() => {
145-
setHoveredVersion(item.version);
157+
handleMouseEnter(item.version);
146158
}}
147159
onMouseLeave={handleMouseLeave}
148160
>

0 commit comments

Comments
 (0)