1
1
import React from 'react' ;
2
2
3
+ import { Flex , useLayoutContext } from '@gravity-ui/uikit' ;
4
+
3
5
import { VDisk } from '../../../components/VDisk/VDisk' ;
6
+ import { valueIsDefined } from '../../../utils' ;
4
7
import { cn } from '../../../utils/cn' ;
5
8
import { getPDiskId } from '../../../utils/disks/helpers' ;
6
9
import type { PreparedVDisk } from '../../../utils/disks/types' ;
@@ -12,6 +15,8 @@ import './Disks.scss';
12
15
13
16
const b = cn ( 'ydb-storage-disks' ) ;
14
17
18
+ const VDISKS_CONTAINER_WIDTH = 300 ;
19
+
15
20
interface DisksProps {
16
21
vDisks ?: PreparedVDisk [ ] ;
17
22
viewContext ?: StorageViewContext ;
@@ -20,23 +25,31 @@ interface DisksProps {
20
25
export function Disks ( { vDisks = [ ] , viewContext} : DisksProps ) {
21
26
const [ highlightedVDisk , setHighlightedVDisk ] = React . useState < string | undefined > ( ) ;
22
27
28
+ const {
29
+ theme : { spaceBaseSize} ,
30
+ } = useLayoutContext ( ) ;
31
+
23
32
if ( ! vDisks . length ) {
24
33
return null ;
25
34
}
26
35
36
+ const unavailableVDiskWidth =
37
+ ( VDISKS_CONTAINER_WIDTH - spaceBaseSize * ( vDisks . length - 1 ) ) / vDisks . length ;
38
+
27
39
return (
28
40
< div className = { b ( null ) } >
29
- < div className = { b ( 'vdisks-wrapper' ) } >
41
+ < Flex direction = { 'row' } gap = { 1 } grow style = { { width : VDISKS_CONTAINER_WIDTH } } >
30
42
{ vDisks ?. map ( ( vDisk ) => (
31
43
< VDiskItem
32
44
key = { vDisk . StringifiedId }
33
45
vDisk = { vDisk }
34
46
inactive = { ! isVdiskActive ( vDisk , viewContext ) }
35
47
highlightedVDisk = { highlightedVDisk }
36
48
setHighlightedVDisk = { setHighlightedVDisk }
49
+ unavailableVDiskWidth = { unavailableVDiskWidth }
37
50
/>
38
51
) ) }
39
- </ div >
52
+ </ Flex >
40
53
41
54
< div className = { b ( 'pdisks-wrapper' ) } >
42
55
{ vDisks ?. map ( ( vDisk ) => (
@@ -57,21 +70,27 @@ interface DisksItemProps {
57
70
inactive ?: boolean ;
58
71
highlightedVDisk : string | undefined ;
59
72
setHighlightedVDisk : ( id : string | undefined ) => void ;
73
+ unavailableVDiskWidth ?: number ;
60
74
}
61
75
62
- function VDiskItem ( { vDisk, highlightedVDisk, inactive, setHighlightedVDisk} : DisksItemProps ) {
76
+ function VDiskItem ( {
77
+ vDisk,
78
+ highlightedVDisk,
79
+ inactive,
80
+ setHighlightedVDisk,
81
+ unavailableVDiskWidth,
82
+ } : DisksItemProps ) {
63
83
// Do not show PDisk popup for VDisk
64
84
const vDiskToShow = { ...vDisk , PDisk : undefined } ;
65
85
66
86
const vDiskId = vDisk . StringifiedId ;
67
87
88
+ // show vdisks without AllocatedSize as having average width (#1433)
89
+ const minWidth = valueIsDefined ( vDiskToShow . AllocatedSize ) ? undefined : unavailableVDiskWidth ;
90
+ const flexGrow = Number ( vDiskToShow . AllocatedSize ) || 1 ;
91
+
68
92
return (
69
- < div
70
- style = { {
71
- flexGrow : Number ( vDisk . AllocatedSize ) || 1 ,
72
- } }
73
- className = { b ( 'vdisk-item' ) }
74
- >
93
+ < div style = { { flexGrow, minWidth} } className = { b ( 'vdisk-item' ) } >
75
94
< VDisk
76
95
data = { vDiskToShow }
77
96
compact
0 commit comments