Skip to content

Commit 8c6e334

Browse files
committed
Apply improvements from PRs
1 parent 1222a24 commit 8c6e334

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

site/src/pages/WorkspacePage/useResourcesNav.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
11
import { WorkspaceResource } from "api/typesGenerated";
22
import { useTab } from "hooks";
3-
import { useCallback, useEffect } from "react";
3+
import { useCallback, useEffect, useMemo } from "react";
44

55
export const resourceOptionId = (resource: WorkspaceResource) => {
66
return `${resource.type}_${resource.name}`;
77
};
88

99
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],
1324
);
1425

26+
const selectedResource = resources.find(isSelected);
27+
1528
useEffect(() => {
1629
const hasResourcesWithAgents =
17-
resources.length > 0 &&
18-
resources[0].agents &&
19-
resources[0].agents.length > 0;
30+
firstResource && firstResource.agents && firstResource.agents.length > 0;
2031
if (!selectedResource && hasResourcesWithAgents) {
21-
resourcesNav.set(resourceOptionId(resources[0]));
32+
resourcesNav.set(resourceOptionId(firstResource));
2233
}
23-
}, [resources, selectedResource, resourcesNav]);
34+
}, [firstResource, resourcesNav, selectedResource]);
2435

2536
const select = useCallback(
2637
(resource: WorkspaceResource) => {
@@ -29,13 +40,6 @@ export const useResourcesNav = (resources: WorkspaceResource[]) => {
2940
[resourcesNav],
3041
);
3142

32-
const isSelected = useCallback(
33-
(resource: WorkspaceResource) => {
34-
return resourceOptionId(resource) === resourcesNav.value;
35-
},
36-
[resourcesNav.value],
37-
);
38-
3943
return {
4044
isSelected,
4145
select,

0 commit comments

Comments
 (0)