@@ -17,6 +17,7 @@ import {useDiskPagesAvailable} from '../../store/reducers/capabilities/hooks';
1717import { setHeaderBreadcrumbs } from '../../store/reducers/header/header' ;
1818import { vDiskApi } from '../../store/reducers/vdisk/vdisk' ;
1919import type { ModifyDiskResponse } from '../../types/api/modifyDisk' ;
20+ import type { TVDiskID } from '../../types/api/vdisk' ;
2021import { valueIsDefined } from '../../utils' ;
2122import { cn } from '../../utils/cn' ;
2223import { getSeverityColor , getVDiskSlotBasedId } from '../../utils/disks/helpers' ;
@@ -37,10 +38,11 @@ export function VDiskPage() {
3738 const isUserAllowedToMakeChanges = useIsUserAllowedToMakeChanges ( ) ;
3839 const newDiskApiAvailable = useDiskPagesAvailable ( ) ;
3940
40- const [ { nodeId, pDiskId, vDiskSlotId} ] = useQueryParams ( {
41+ const [ { nodeId, pDiskId, vDiskSlotId, vDiskId : vDiskIdParam } ] = useQueryParams ( {
4142 nodeId : StringParam ,
4243 pDiskId : StringParam ,
4344 vDiskSlotId : StringParam ,
45+ vDiskId : StringParam ,
4446 } ) ;
4547
4648 React . useEffect ( ( ) => {
@@ -61,7 +63,9 @@ export function VDiskPage() {
6163 } ) ;
6264 const loading = isFetching && vDiskData === undefined ;
6365 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 ) || { } ;
6569 const vDiskIdParamsDefined =
6670 valueIsDefined ( GroupID ) &&
6771 valueIsDefined ( GroupGeneration ) &&
@@ -149,7 +153,7 @@ export function VDiskPage() {
149153 className = { vDiskPageCn ( 'title' ) }
150154 entityName = { vDiskPageKeyset ( 'vdisk' ) }
151155 status = { getSeverityColor ( Severity ) }
152- id = { vDiskData ?. StringifiedId }
156+ id = { vDiskData ?. StringifiedId ?? vDiskIdParam }
153157 />
154158 ) ;
155159 } ;
@@ -228,3 +232,19 @@ export function VDiskPage() {
228232 </ div >
229233 ) ;
230234}
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