@@ -17,6 +17,7 @@ import {useDiskPagesAvailable} from '../../store/reducers/capabilities/hooks';
17
17
import { setHeaderBreadcrumbs } from '../../store/reducers/header/header' ;
18
18
import { vDiskApi } from '../../store/reducers/vdisk/vdisk' ;
19
19
import type { ModifyDiskResponse } from '../../types/api/modifyDisk' ;
20
+ import type { TVDiskID } from '../../types/api/vdisk' ;
20
21
import { valueIsDefined } from '../../utils' ;
21
22
import { cn } from '../../utils/cn' ;
22
23
import { getSeverityColor , getVDiskSlotBasedId } from '../../utils/disks/helpers' ;
@@ -37,10 +38,11 @@ export function VDiskPage() {
37
38
const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges ( ) ;
38
39
const newDiskApiAvailable = useDiskPagesAvailable ( ) ;
39
40
40
- const [ { nodeId, pDiskId, vDiskSlotId} ] = useQueryParams ( {
41
+ const [ { nodeId, pDiskId, vDiskSlotId, vDiskId : vDiskIdParam } ] = useQueryParams ( {
41
42
nodeId : StringParam ,
42
43
pDiskId : StringParam ,
43
44
vDiskSlotId : StringParam ,
45
+ vDiskId : StringParam ,
44
46
} ) ;
45
47
46
48
React . useEffect ( ( ) => {
@@ -61,7 +63,9 @@ export function VDiskPage() {
61
63
} ) ;
62
64
const loading = isFetching && vDiskData === undefined ;
63
65
const { NodeHost, NodeId, NodeType, NodeDC, PDiskId, PDiskType, Severity, VDiskId} = vDiskData ;
64
- const { GroupID, GroupGeneration, Ring, Domain, VDisk} = VDiskId || { } ;
66
+
67
+ const { GroupID, GroupGeneration, Ring, Domain, VDisk} =
68
+ VDiskId || getVDiskIdFromString ( vDiskIdParam ) || { } ;
65
69
const vDiskIdParamsDefined =
66
70
valueIsDefined ( GroupID ) &&
67
71
valueIsDefined ( GroupGeneration ) &&
@@ -149,7 +153,7 @@ export function VDiskPage() {
149
153
className = { vDiskPageCn ( 'title' ) }
150
154
entityName = { vDiskPageKeyset ( 'vdisk' ) }
151
155
status = { getSeverityColor ( Severity ) }
152
- id = { vDiskData ?. StringifiedId }
156
+ id = { vDiskData ?. StringifiedId ?? vDiskIdParam }
153
157
/>
154
158
) ;
155
159
} ;
@@ -228,3 +232,19 @@ export function VDiskPage() {
228
232
</ div >
229
233
) ;
230
234
}
235
+
236
+ function getVDiskIdFromString ( input : string | null | undefined ) : TVDiskID | undefined {
237
+ const match = / ^ ( \d + ) - ( \d + ) - ( \d + ) - ( \d + ) - ( \d + ) $ / . exec ( input ?? '' ) ;
238
+ if ( ! match ) {
239
+ return undefined ;
240
+ }
241
+
242
+ const [ , GroupID , GroupGeneration , Ring , Domain , VDisk ] = match ;
243
+ return {
244
+ GroupID : Number ( GroupID ) ,
245
+ GroupGeneration : Number ( GroupGeneration ) ,
246
+ Ring : Number ( Ring ) ,
247
+ Domain : Number ( Domain ) ,
248
+ VDisk : Number ( VDisk ) ,
249
+ } ;
250
+ }
0 commit comments