Skip to content

Commit 30c6427

Browse files
authored
fix: design refinements of query banner (#2630)
1 parent b789b1b commit 30c6427

File tree

11 files changed

+471
-281
lines changed

11 files changed

+471
-281
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
.queries-activity-alert {
2+
$b: &;
3+
4+
border-radius: var(--g-border-radius-s);
5+
6+
&__card {
7+
width: 100%;
8+
padding: 0;
9+
10+
border: 1px solid var(--g-color-line-generic);
11+
border-radius: var(--g-border-radius-s);
12+
}
13+
14+
&__content {
15+
padding: calc(var(--g-spacing-5) - 1px) var(--g-spacing-4);
16+
}
17+
18+
&__title {
19+
color: var(--g-color-text-primary);
20+
}
21+
22+
&__open-queries-button {
23+
margin-left: var(--g-spacing-1);
24+
}
25+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import {CirclePlay, Display, Person} from '@gravity-ui/icons';
2+
import {Button, Card, Flex, Icon, Label, Text} from '@gravity-ui/uikit';
3+
import {useHistory, useLocation} from 'react-router-dom';
4+
5+
import {TenantTabsGroups, getTenantPath} from '../../containers/Tenant/TenantPages';
6+
import {parseQuery} from '../../routes';
7+
import {TENANT_DIAGNOSTICS_TABS_IDS} from '../../store/reducers/tenant/constants';
8+
import {cn} from '../../utils/cn';
9+
10+
import i18n from './i18n';
11+
12+
import './QueriesActivityAlert.scss';
13+
14+
const b = cn('queries-activity-alert');
15+
16+
interface QueriesActivityAlertProps {
17+
runningQueriesCount: number;
18+
uniqueApplications: number;
19+
uniqueUsers: number;
20+
}
21+
22+
export function QueriesActivityAlert({
23+
runningQueriesCount,
24+
uniqueApplications,
25+
uniqueUsers,
26+
}: QueriesActivityAlertProps) {
27+
const history = useHistory();
28+
const location = useLocation();
29+
30+
const handleOpenRunningQueries = () => {
31+
const queryParams = parseQuery(location);
32+
const path = getTenantPath({
33+
...queryParams,
34+
[TenantTabsGroups.diagnosticsTab]: TENANT_DIAGNOSTICS_TABS_IDS.topQueries,
35+
queryMode: 'running',
36+
});
37+
history.push(path);
38+
};
39+
40+
return (
41+
<div className={b()}>
42+
<Card className={b('card')} type="container" view="outlined">
43+
<Flex
44+
direction="row"
45+
justifyContent="space-between"
46+
alignItems="center"
47+
gap={4}
48+
className={b('content')}
49+
>
50+
<Flex>
51+
<Text variant="subheader-2" className={b('title')}>
52+
{i18n('title_queries-activity')}
53+
</Text>
54+
</Flex>
55+
<Flex wrap alignItems="center" gap={1} className={b('stats')}>
56+
<Label
57+
theme={runningQueriesCount > 0 ? 'success' : 'unknown'}
58+
icon={<Icon data={CirclePlay} />}
59+
size="s"
60+
value={String(runningQueriesCount)}
61+
>
62+
{i18n('field_running-queries')}
63+
</Label>
64+
65+
<Label
66+
theme="unknown"
67+
icon={<Icon data={Display} />}
68+
size="s"
69+
value={String(uniqueApplications)}
70+
>
71+
{i18n('field_applications')}
72+
</Label>
73+
74+
<Label
75+
theme="unknown"
76+
icon={<Icon data={Person} />}
77+
size="s"
78+
value={String(uniqueUsers)}
79+
>
80+
{i18n('field_users')}
81+
</Label>
82+
83+
{runningQueriesCount > 0 && (
84+
<Button
85+
view="outlined"
86+
size="s"
87+
onClick={handleOpenRunningQueries}
88+
className={b('open-queries-button')}
89+
>
90+
{i18n('action_open-running-queries')}
91+
</Button>
92+
)}
93+
</Flex>
94+
</Flex>
95+
</Card>
96+
</div>
97+
);
98+
}
Lines changed: 2 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
@use '../../styles/mixins.scss';
2-
31
.queries-activity-bar {
42
$b: &;
53

@@ -15,11 +13,6 @@
1513
}
1614

1715
&__header {
18-
display: flex;
19-
justify-content: space-between;
20-
align-items: center;
21-
gap: var(--g-spacing-3);
22-
2316
padding: var(--g-spacing-3) var(--g-spacing-4);
2417

2518
cursor: pointer;
@@ -44,63 +37,24 @@
4437
}
4538
}
4639

47-
&__content-wrapper {
48-
display: flex;
49-
flex-grow: 1;
50-
align-items: center;
51-
gap: var(--g-spacing-2);
52-
}
53-
54-
&__metrics {
55-
display: flex;
56-
align-items: center;
57-
gap: var(--g-spacing-1);
58-
}
59-
6040
&__content {
61-
display: flex;
62-
flex-direction: column;
63-
gap: var(--g-spacing-4);
64-
6541
padding-top: var(--g-spacing-3);
6642
padding-bottom: var(--g-spacing-3);
6743
}
6844

6945
&__stats {
70-
display: flex;
71-
flex-wrap: wrap;
72-
align-items: center;
73-
gap: var(--g-spacing-1);
74-
7546
padding: 0 var(--g-spacing-4);
7647
}
7748

7849
&__open-queries-button {
79-
margin-left: 4px;
50+
margin-left: var(--g-spacing-1);
8051
}
8152

8253
&__charts {
83-
display: flex;
84-
gap: var(--g-spacing-4);
85-
8654
padding: 0 var(--g-spacing-4);
8755

8856
@media (max-width: 1200px) {
89-
flex-direction: column;
57+
flex-direction: column !important;
9058
}
9159
}
92-
93-
&__chart-container {
94-
display: flex;
95-
flex: 1;
96-
flex-direction: column;
97-
gap: var(--g-spacing-3);
98-
}
99-
100-
// Focus states for accessibility
101-
&__header:focus-visible,
102-
&__open-queries-button:focus-visible {
103-
outline: 2px solid var(--g-color-line-focus);
104-
outline-offset: 2px;
105-
}
10660
}

0 commit comments

Comments
 (0)