Skip to content

Commit ecb145d

Browse files
committed
refactor(Storage): redo disks layout
1 parent d0a4442 commit ecb145d

File tree

8 files changed

+88
-64
lines changed

8 files changed

+88
-64
lines changed

src/containers/Storage/DiskStateProgressBar/DiskStateProgressBar.scss

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
.storage-disk-progress-bar {
2+
$block: &;
3+
24
$border-width: 2px;
35
$outer-border-radius: 4px;
46
$inner-border-radius: $outer-border-radius - $border-width;
57

6-
$block: &;
78
position: relative;
89

9-
display: inline-block;
10+
display: block;
1011

11-
width: 100%;
12+
min-width: 50px;
1213
height: var(--yc-text-body-2-line-height);
1314

14-
vertical-align: top;
15+
text-align: center;
1516

17+
color: var(--yc-color-text-primary);
1618
border: $border-width solid var(--yc-color-infographics-misc-heavy);
1719
border-radius: $outer-border-radius;
1820
background-color: var(--yc-color-infographics-misc-light);
@@ -82,7 +84,7 @@
8284
}
8385
}
8486
&__filled-title {
85-
position: absolute;
87+
position: relative;
8688
z-index: 2;
8789

8890
font-size: var(--yc-text-body-1-font-size);

src/containers/Storage/DiskStateProgressBar/DiskStateProgressBar.tsx

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import cn from 'bem-cn-lite';
55
import {INVERTED_DISKS_KEY} from '../../../utils/constants';
66
import {getSettingValue} from '../../../store/reducers/settings';
77

8-
import InternalLink from '../../../components/InternalLink/InternalLink';
9-
108
import './DiskStateProgressBar.scss';
119

1210
const b = cn('storage-disk-progress-bar');
@@ -23,13 +21,11 @@ export const diskProgressColors = {
2321
interface DiskStateProgressBarProps {
2422
diskAllocatedPercent?: number;
2523
severity?: keyof typeof diskProgressColors;
26-
href?: string;
2724
}
2825

2926
function DiskStateProgressBar({
3027
diskAllocatedPercent = -1,
3128
severity,
32-
href,
3329
}: DiskStateProgressBarProps) {
3430
const inverted = useSelector((state) => getSettingValue(state, INVERTED_DISKS_KEY));
3531

@@ -63,13 +59,7 @@ function DiskStateProgressBar({
6359
aria-valuemax={100}
6460
aria-valuenow={diskAllocatedPercent}
6561
>
66-
{href ? (
67-
<InternalLink to={href} className={b('link')}>
68-
{renderAllocatedPercent()}
69-
</InternalLink>
70-
) : (
71-
renderAllocatedPercent()
72-
)}
62+
{renderAllocatedPercent()}
7363
</div>
7464
);
7565
}

src/containers/Storage/Pdisk/Pdisk.scss

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
.pdisk-storage {
22
position: relative;
33

4-
display: flex;
5-
flex-grow: 1;
6-
align-items: center;
7-
84
min-width: 120px;
9-
max-width: 200px;
10-
margin-right: 10px;
115

12-
cursor: pointer;
6+
border-radius: 4px; // to match interactive area with disk shape
137

14-
&:last-child {
15-
margin-right: 0px;
8+
&__content {
9+
border-radius: 4px; // to match interactive area with disk shape
1610
}
1711

1812
&__popup-wrapper {
@@ -21,6 +15,7 @@
2115

2216
&__media-type {
2317
position: absolute;
18+
top: 0;
2419
right: 4px;
2520

2621
font-size: var(--yc-text-body-1-font-size);

src/containers/Storage/Pdisk/Pdisk.tsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
import React, {useEffect, useState, useRef, useMemo} from 'react';
22
import cn from 'bem-cn-lite';
3+
34
import {Popup} from '@gravity-ui/uikit';
45

5-
import type {RequiredField} from '../../../types';
6-
//@ts-ignore
7-
import {bytesToGB} from '../../../utils/utils';
8-
//@ts-ignore
6+
import {InfoViewer} from '../../../components/InfoViewer';
7+
import InternalLink from '../../../components/InternalLink/InternalLink';
8+
99
import routes, {createHref} from '../../../routes';
10-
//@ts-ignore
10+
import type {RequiredField} from '../../../types';
11+
import {TPDiskStateInfo, TPDiskState} from '../../../types/api/storage';
1112
import {getPDiskId} from '../../../utils';
1213
import {getPDiskType} from '../../../utils/pdisk';
13-
import {TPDiskStateInfo, TPDiskState} from '../../../types/api/storage';
14-
import {InfoViewer} from '../../../components/InfoViewer';
14+
import {bytesToGB} from '../../../utils/utils';
15+
16+
import {STRUCTURE} from '../../Node/NodePages';
17+
1518
import DiskStateProgressBar, {
1619
diskProgressColors,
1720
} from '../DiskStateProgressBar/DiskStateProgressBar';
18-
import {STRUCTURE} from '../../Node/NodePages';
1921

2022
import {colorSeverity, NOT_AVAILABLE_SEVERITY} from '../utils';
2123

@@ -135,16 +137,20 @@ function Pdisk(props: PDiskProps) {
135137
<React.Fragment>
136138
{renderPopup()}
137139
<div className={b()} ref={anchor} onMouseEnter={showPopup} onMouseLeave={hidePopup}>
138-
<DiskStateProgressBar
139-
diskAllocatedPercent={pdiskAllocatedPercent}
140-
severity={severity as keyof typeof diskProgressColors}
141-
href={createHref(
140+
<InternalLink
141+
to={createHref(
142142
routes.node,
143143
{id: props.NodeId, activeTab: STRUCTURE},
144144
{pdiskId: props.PDiskId || ''},
145145
)}
146-
/>
147-
<div className={b('media-type')}>{getPDiskType(props)}</div>
146+
className={b('content')}
147+
>
148+
<DiskStateProgressBar
149+
diskAllocatedPercent={pdiskAllocatedPercent}
150+
severity={severity as keyof typeof diskProgressColors}
151+
/>
152+
<div className={b('media-type')}>{getPDiskType(props)}</div>
153+
</InternalLink>
148154
</div>
149155
</React.Fragment>
150156
);

src/containers/Storage/StorageNodes/StorageNodes.scss

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@
77

88
min-width: 500px;
99
}
10+
&__pdisks-item {
11+
flex-grow: 1;
12+
13+
max-width: 200px;
14+
margin-right: 10px;
15+
16+
&:last-child {
17+
margin-right: 0px;
18+
}
19+
}
1020
&__fqdn-wrapper {
1121
width: 330px;
1222
}

src/containers/Storage/StorageNodes/StorageNodes.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import _ from 'lodash';
22
import cn from 'bem-cn-lite';
3+
34
import DataTable, {Column, Settings, SortOrder} from '@yandex-cloud/react-data-table';
45
import {Popover, PopoverBehavior} from '@gravity-ui/uikit';
56

6-
//@ts-ignore
77
import {VisibleEntities} from '../../../store/reducers/storage';
88

99
import {EmptyFilter} from '../EmptyFilter/EmptyFilter';
@@ -108,7 +108,9 @@ function StorageNodes({data, tableSettings, visibleEntities, onShowAll}: Storage
108108
render: ({value, row}) => (
109109
<div className={b('pdisks-wrapper')}>
110110
{_.map(value as any, (el) => (
111-
<Pdisk key={el.PDiskId} {...el} NodeId={row.NodeId} />
111+
<div className={b('pdisks-item')}>
112+
<Pdisk key={el.PDiskId} {...el} NodeId={row.NodeId} />
113+
</div>
112114
))}
113115
</div>
114116
),

src/containers/Storage/Vdisk/Vdisk.js

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
import React, {useEffect, useState, useRef, useMemo} from 'react';
22
import PropTypes from 'prop-types';
33
import cn from 'bem-cn-lite';
4+
45
import {Label, Popup} from '@gravity-ui/uikit';
56

6-
import {bytesToGB, bytesToSpeed} from '../../../utils/utils';
7+
import InternalLink from '../../../components/InternalLink/InternalLink';
8+
import {InfoViewer} from '../../../components/InfoViewer';
9+
710
import routes, {createHref} from '../../../routes';
811
import {stringifyVdiskId, getPDiskId} from '../../../utils';
912
import {getPDiskType} from '../../../utils/pdisk';
10-
import {InfoViewer} from '../../../components/InfoViewer';
13+
import {bytesToGB, bytesToSpeed} from '../../../utils/utils';
14+
15+
import {STRUCTURE} from '../../Node/NodePages';
16+
1117
import DiskStateProgressBar, {
1218
diskProgressColors,
1319
} from '../DiskStateProgressBar/DiskStateProgressBar';
14-
import {STRUCTURE} from '../../Node/NodePages';
1520

1621
import {colorSeverity, NOT_AVAILABLE_SEVERITY} from '../utils';
1722

@@ -225,33 +230,41 @@ function Vdisk(props) {
225230
const available = AvailableSize ? AvailableSize : PDisk?.AvailableSize;
226231

227232
if (!available) {
228-
return;
233+
return undefined;
229234
}
230-
return !isNaN(Number(AllocatedSize))
231-
? (Number(AllocatedSize) * 100) / (Number(available) + Number(AllocatedSize))
232-
: undefined;
235+
236+
return isNaN(Number(AllocatedSize))
237+
? undefined
238+
: (Number(AllocatedSize) * 100) / (Number(available) + Number(AllocatedSize));
233239
}, [props.AllocatedSize, props.AvailableSize, props.PDisk?.AvailableSize]);
234240

235241
return (
236242
<React.Fragment>
237243
{renderPopup()}
238244
<div className={b()} ref={anchor} onMouseEnter={showPopup} onMouseLeave={hidePopup}>
239-
<DiskStateProgressBar
240-
diskAllocatedPercent={vdiskAllocatedPercent}
241-
severity={severity}
242-
href={
243-
props.NodeId
244-
? createHref(
245-
routes.node,
246-
{id: props.NodeId, activeTab: STRUCTURE},
247-
{
248-
pdiskId: props.PDisk?.PDiskId,
249-
vdiskId: stringifyVdiskId(props.VDiskId),
250-
},
251-
)
252-
: undefined
253-
}
254-
/>
245+
{props.NodeId ? (
246+
<InternalLink
247+
to={createHref(
248+
routes.node,
249+
{id: props.NodeId, activeTab: STRUCTURE},
250+
{
251+
pdiskId: props.PDisk?.PDiskId,
252+
vdiskId: stringifyVdiskId(props.VDiskId),
253+
},
254+
)}
255+
className={b('content')}
256+
>
257+
<DiskStateProgressBar
258+
diskAllocatedPercent={vdiskAllocatedPercent}
259+
severity={severity}
260+
/>
261+
</InternalLink>
262+
) : (
263+
<DiskStateProgressBar
264+
diskAllocatedPercent={vdiskAllocatedPercent}
265+
severity={severity}
266+
/>
267+
)}
255268
</div>
256269
</React.Fragment>
257270
);

src/containers/Storage/Vdisk/Vdisk.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
.vdisk-storage {
2+
border-radius: 4px; // to match interactive area with disk shape
3+
4+
&__content {
5+
border-radius: 4px; // to match interactive area with disk shape
6+
}
7+
28
&__popup-wrapper {
39
padding: 12px;
410

0 commit comments

Comments
 (0)