1
1
import { WorkspaceResource } from "api/typesGenerated" ;
2
2
import { useTab } from "hooks" ;
3
- import { useCallback , useEffect } from "react" ;
3
+ import { useCallback , useEffect , useMemo } from "react" ;
4
4
5
5
export const resourceOptionId = ( resource : WorkspaceResource ) => {
6
6
return `${ resource . type } _${ resource . name } ` ;
7
7
} ;
8
8
9
9
export const useResourcesNav = ( resources : WorkspaceResource [ ] ) => {
10
- const resourcesNav = useTab ( "resources" , "" ) ;
11
- const selectedResource = resources . find (
12
- ( r ) => resourceOptionId ( r ) === resourcesNav . value ,
10
+ const firstResource = useMemo (
11
+ ( ) => ( resources . length > 0 ? resources [ 0 ] : undefined ) ,
12
+ [ resources ] ,
13
+ ) ;
14
+ const resourcesNav = useTab (
15
+ "resources" ,
16
+ firstResource ? resourceOptionId ( firstResource ) : "" ,
17
+ ) ;
18
+
19
+ const isSelected = useCallback (
20
+ ( resource : WorkspaceResource ) => {
21
+ return resourceOptionId ( resource ) === resourcesNav . value ;
22
+ } ,
23
+ [ resourcesNav . value ] ,
13
24
) ;
14
25
26
+ const selectedResource = resources . find ( isSelected ) ;
27
+
15
28
useEffect ( ( ) => {
16
29
const hasResourcesWithAgents =
17
- resources . length > 0 &&
18
- resources [ 0 ] . agents &&
19
- resources [ 0 ] . agents . length > 0 ;
30
+ firstResource && firstResource . agents && firstResource . agents . length > 0 ;
20
31
if ( ! selectedResource && hasResourcesWithAgents ) {
21
- resourcesNav . set ( resourceOptionId ( resources [ 0 ] ) ) ;
32
+ resourcesNav . set ( resourceOptionId ( firstResource ) ) ;
22
33
}
23
- } , [ resources , selectedResource , resourcesNav ] ) ;
34
+ } , [ firstResource , resourcesNav , selectedResource ] ) ;
24
35
25
36
const select = useCallback (
26
37
( resource : WorkspaceResource ) => {
@@ -29,13 +40,6 @@ export const useResourcesNav = (resources: WorkspaceResource[]) => {
29
40
[ resourcesNav ] ,
30
41
) ;
31
42
32
- const isSelected = useCallback (
33
- ( resource : WorkspaceResource ) => {
34
- return resourceOptionId ( resource ) === resourcesNav . value ;
35
- } ,
36
- [ resourcesNav . value ] ,
37
- ) ;
38
-
39
43
return {
40
44
isSelected,
41
45
select,
0 commit comments