@@ -13,7 +13,10 @@ import {createVDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
13
13
import { isFullVDiskData } from '../../utils/disks/helpers' ;
14
14
import type { PreparedVDisk , UnavailableDonor } from '../../utils/disks/types' ;
15
15
import { useTypedSelector } from '../../utils/hooks' ;
16
- import { useIsUserAllowedToMakeChanges } from '../../utils/hooks/useIsUserAllowedToMakeChanges' ;
16
+ import {
17
+ useIsUserAllowedToMakeChanges ,
18
+ useIsViewerUser ,
19
+ } from '../../utils/hooks/useIsUserAllowedToMakeChanges' ;
17
20
import { bytesToGB , bytesToSpeed } from '../../utils/utils' ;
18
21
import type { InfoViewerItem } from '../InfoViewer' ;
19
22
import { InfoViewer } from '../InfoViewer' ;
@@ -23,23 +26,27 @@ import {preparePDiskData} from '../PDiskPopup/PDiskPopup';
23
26
import { getVDiskLink } from '../VDisk/utils' ;
24
27
import { vDiskInfoKeyset } from '../VDiskInfo/i18n' ;
25
28
29
+ import { vDiskPopupKeyset } from './i18n' ;
30
+
26
31
import './VDiskPopup.scss' ;
27
32
28
33
const b = cn ( 'vdisk-storage-popup' ) ;
29
34
30
35
const prepareUnavailableVDiskData = ( data : UnavailableDonor , withDeveloperUILink ?: boolean ) => {
31
36
const { NodeId, PDiskId, VSlotId, StoragePoolName} = data ;
32
37
33
- const vdiskData : InfoViewerItem [ ] = [ { label : 'State' , value : 'not available' } ] ;
38
+ const vdiskData : InfoViewerItem [ ] = [
39
+ { label : vDiskPopupKeyset ( 'label_state' ) , value : vDiskPopupKeyset ( 'context_not-available' ) } ,
40
+ ] ;
34
41
35
42
if ( StoragePoolName ) {
36
- vdiskData . push ( { label : 'StoragePool' , value : StoragePoolName } ) ;
43
+ vdiskData . push ( { label : vDiskPopupKeyset ( 'label_storage-pool' ) , value : StoragePoolName } ) ;
37
44
}
38
45
39
46
vdiskData . push (
40
- { label : 'NodeId' , value : NodeId ?? EMPTY_DATA_PLACEHOLDER } ,
41
- { label : 'PDiskId' , value : PDiskId ?? EMPTY_DATA_PLACEHOLDER } ,
42
- { label : 'VSlotId' , value : VSlotId ?? EMPTY_DATA_PLACEHOLDER } ,
47
+ { label : vDiskPopupKeyset ( 'label_node-id' ) , value : NodeId ?? EMPTY_DATA_PLACEHOLDER } ,
48
+ { label : vDiskPopupKeyset ( 'label_pdisk-id' ) , value : PDiskId ?? EMPTY_DATA_PLACEHOLDER } ,
49
+ { label : vDiskPopupKeyset ( 'label_vslot-id' ) , value : VSlotId ?? EMPTY_DATA_PLACEHOLDER } ,
43
50
) ;
44
51
45
52
if (
@@ -55,7 +62,7 @@ const prepareUnavailableVDiskData = (data: UnavailableDonor, withDeveloperUILink
55
62
} ) ;
56
63
57
64
vdiskData . push ( {
58
- label : 'Links' ,
65
+ label : vDiskPopupKeyset ( 'label_links' ) ,
59
66
value : < LinkWithIcon title = { 'Developer UI' } url = { vDiskInternalViewerPath } /> ,
60
67
} ) ;
61
68
}
@@ -85,58 +92,61 @@ const prepareVDiskData = (data: PreparedVDisk, withDeveloperUILink?: boolean) =>
85
92
} = data ;
86
93
87
94
const vdiskData : InfoViewerItem [ ] = [
88
- { label : 'VDisk' , value : StringifiedId } ,
89
- { label : 'State' , value : VDiskState ?? 'not available' } ,
95
+ { label : vDiskPopupKeyset ( 'label_vdisk' ) , value : StringifiedId } ,
96
+ {
97
+ label : vDiskPopupKeyset ( 'label_state' ) ,
98
+ value : VDiskState ?? vDiskPopupKeyset ( 'context_not-available' ) ,
99
+ } ,
90
100
] ;
91
101
92
102
if ( StoragePoolName ) {
93
- vdiskData . push ( { label : 'StoragePool' , value : StoragePoolName } ) ;
103
+ vdiskData . push ( { label : vDiskPopupKeyset ( 'label_storage-pool' ) , value : StoragePoolName } ) ;
94
104
}
95
105
96
106
if ( SatisfactionRank && SatisfactionRank . FreshRank ?. Flag !== EFlag . Green ) {
97
107
vdiskData . push ( {
98
- label : 'Fresh' ,
108
+ label : vDiskPopupKeyset ( 'label_fresh' ) ,
99
109
value : SatisfactionRank . FreshRank ?. Flag ,
100
110
} ) ;
101
111
}
102
112
103
113
if ( SatisfactionRank && SatisfactionRank . LevelRank ?. Flag !== EFlag . Green ) {
104
114
vdiskData . push ( {
105
- label : 'Level' ,
115
+ label : vDiskPopupKeyset ( 'label_level' ) ,
106
116
value : SatisfactionRank . LevelRank ?. Flag ,
107
117
} ) ;
108
118
}
109
119
110
120
if ( SatisfactionRank && SatisfactionRank . FreshRank ?. RankPercent ) {
111
121
vdiskData . push ( {
112
- label : 'Fresh' ,
122
+ label : vDiskPopupKeyset ( 'label_fresh' ) ,
113
123
value : SatisfactionRank . FreshRank . RankPercent ,
114
124
} ) ;
115
125
}
116
126
117
127
if ( SatisfactionRank && SatisfactionRank . LevelRank ?. RankPercent ) {
118
128
vdiskData . push ( {
119
- label : 'Level' ,
129
+ label : vDiskPopupKeyset ( 'label_level' ) ,
120
130
value : SatisfactionRank . LevelRank . RankPercent ,
121
131
} ) ;
122
132
}
123
133
124
134
if ( DiskSpace && DiskSpace !== EFlag . Green ) {
125
- vdiskData . push ( { label : 'Space' , value : DiskSpace } ) ;
135
+ vdiskData . push ( { label : vDiskPopupKeyset ( 'label_space' ) , value : DiskSpace } ) ;
126
136
}
127
137
128
138
if ( FrontQueues && FrontQueues !== EFlag . Green ) {
129
- vdiskData . push ( { label : 'FrontQueues' , value : FrontQueues } ) ;
139
+ vdiskData . push ( { label : vDiskPopupKeyset ( 'label_front-queues' ) , value : FrontQueues } ) ;
130
140
}
131
141
132
142
if ( Replicated === false && VDiskState === EVDiskState . OK ) {
133
- vdiskData . push ( { label : 'Replicated' , value : 'NO' } ) ;
143
+ vdiskData . push ( { label : vDiskPopupKeyset ( 'label_replicated' ) , value : 'NO' } ) ;
134
144
135
145
// Only show replication progress and time remaining when disk is not replicated and state is OK
136
146
if ( valueIsDefined ( ReplicationProgress ) ) {
137
147
const progressPercent = Math . round ( ReplicationProgress * 100 ) ;
138
148
vdiskData . push ( {
139
- label : 'Progress' ,
149
+ label : vDiskPopupKeyset ( 'label_progress' ) ,
140
150
value : `${ progressPercent } %` ,
141
151
} ) ;
142
152
}
@@ -145,31 +155,34 @@ const prepareVDiskData = (data: PreparedVDisk, withDeveloperUILink?: boolean) =>
145
155
const timeRemaining = formatUptimeInSeconds ( ReplicationSecondsRemaining ) ;
146
156
if ( timeRemaining ) {
147
157
vdiskData . push ( {
148
- label : 'Remaining' ,
158
+ label : vDiskPopupKeyset ( 'label_remaining' ) ,
149
159
value : timeRemaining ,
150
160
} ) ;
151
161
}
152
162
}
153
163
}
154
164
155
165
if ( UnsyncedVDisks ) {
156
- vdiskData . push ( { label : 'UnsyncVDisks' , value : UnsyncedVDisks } ) ;
166
+ vdiskData . push ( { label : vDiskPopupKeyset ( 'label_unsync-vdisks' ) , value : UnsyncedVDisks } ) ;
157
167
}
158
168
159
169
if ( Number ( AllocatedSize ) ) {
160
170
vdiskData . push ( {
161
- label : 'Allocated' ,
171
+ label : vDiskPopupKeyset ( 'label_allocated' ) ,
162
172
value : bytesToGB ( AllocatedSize ) ,
163
173
} ) ;
164
174
}
165
175
166
176
if ( Number ( ReadThroughput ) ) {
167
- vdiskData . push ( { label : 'Read' , value : bytesToSpeed ( ReadThroughput ) } ) ;
177
+ vdiskData . push ( {
178
+ label : vDiskPopupKeyset ( 'label_read' ) ,
179
+ value : bytesToSpeed ( ReadThroughput ) ,
180
+ } ) ;
168
181
}
169
182
170
183
if ( Number ( WriteThroughput ) ) {
171
184
vdiskData . push ( {
172
- label : 'Write' ,
185
+ label : vDiskPopupKeyset ( 'label_write' ) ,
173
186
value : bytesToSpeed ( WriteThroughput ) ,
174
187
} ) ;
175
188
}
@@ -191,7 +204,7 @@ const prepareVDiskData = (data: PreparedVDisk, withDeveloperUILink?: boolean) =>
191
204
const vDiskPagePath = getVDiskLink ( { VDiskSlotId, PDiskId, NodeId, StringifiedId} ) ;
192
205
if ( vDiskPagePath ) {
193
206
vdiskData . push ( {
194
- label : 'Links' ,
207
+ label : vDiskPopupKeyset ( 'label_links' ) ,
195
208
value : (
196
209
< Flex wrap = "wrap" gap = { 2 } >
197
210
< LinkWithIcon
@@ -221,6 +234,7 @@ interface VDiskPopupProps {
221
234
222
235
export const VDiskPopup = ( { data} : VDiskPopupProps ) => {
223
236
const isFullData = isFullVDiskData ( data ) ;
237
+ const isViewerUser = useIsViewerUser ( ) ;
224
238
225
239
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges ( ) ;
226
240
@@ -247,7 +261,7 @@ export const VDiskPopup = ({data}: VDiskPopupProps) => {
247
261
const donors = data . Donors ;
248
262
for ( const donor of donors ) {
249
263
donorsInfo . push ( {
250
- label : 'VDisk' ,
264
+ label : vDiskPopupKeyset ( 'label_vdisk' ) ,
251
265
value : < InternalLink to = { getVDiskLink ( donor ) } > { donor . StringifiedId } </ InternalLink > ,
252
266
} ) ;
253
267
}
@@ -257,7 +271,7 @@ export const VDiskPopup = ({data}: VDiskPopupProps) => {
257
271
< div className = { b ( ) } >
258
272
{ data . DonorMode && < Label className = { b ( 'donor-label' ) } > Donor</ Label > }
259
273
< InfoViewer title = "VDisk" info = { vdiskInfo } size = "s" />
260
- { pdiskInfo && < InfoViewer title = "PDisk" info = { pdiskInfo } size = "s" /> }
274
+ { pdiskInfo && isViewerUser && < InfoViewer title = "PDisk" info = { pdiskInfo } size = "s" /> }
261
275
{ donorsInfo . length > 0 && < InfoViewer title = "Donors" info = { donorsInfo } size = "s" /> }
262
276
</ div >
263
277
) ;
0 commit comments