Skip to content

Commit dc8bb26

Browse files
committed
1 parent c1ae7d0 commit dc8bb26

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/features/clusters/components/ClusterCard.tsx

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
} from '@/components/ui/dropdownMenu';
1111
import { renderBadgeStatusText, renderBadgeStatusVariant } from '@/components/ui/utils/badgeStatus';
1212
import { useInstanceClient } from '@/config/useInstanceClient';
13+
import { getClusterInfo } from '@/features/cluster/queries/getClusterInfoQuery';
1314
import { ClusterCardAction } from '@/features/clusters/components/ClusterCardAction';
1415
import { onInstanceLogoutSubmit } from '@/features/instance/operations/mutations/onInstanceLogoutSubmit';
1516
import { useInstanceAuth } from '@/hooks/useAuth';
@@ -20,7 +21,7 @@ import { authStore } from '@/lib/authStore';
2021
import { getOperationsUrlForCluster } from '@/lib/urls/getOperationsUrlForCluster';
2122
import { Link } from '@tanstack/react-router';
2223
import { Ellipsis } from 'lucide-react';
23-
import { useCallback, useMemo } from 'react';
24+
import { useCallback, useMemo, useState } from 'react';
2425

2526
const activeClusterStatuses = ['RUNNING'];
2627
const deletedClusterStatuses = ['TERMINATING', 'TERMINATED', 'REMOVED'];
@@ -39,28 +40,34 @@ export function ClusterCard({
3940
const notTerminated = useMemo(() => cluster.status && !deletedClusterStatuses.includes(cluster.status), [cluster.status]);
4041
const operationsUrl = useMemo(() => getOperationsUrlForCluster(cluster), [cluster]);
4142
const instanceClient = useInstanceClient(operationsUrl);
43+
const [signingOut, setSigningOut] = useState(false);
4244

4345
const onSignOutClick = useCallback(async () => {
46+
setSigningOut(true);
47+
const fullCluster = await getClusterInfo(cluster.id).catch(err => {
48+
console.error('Failed to lookup cluster details, proceeding without checking instances.', err);
49+
return null;
50+
});
4451
await onInstanceLogoutSubmit({ instanceClient });
45-
authStore.setUserForEntity(cluster, null);
46-
if (cluster.instances?.length) {
52+
if (fullCluster?.instances?.length) {
4753
// Flag all cluster instances as signed out as well.
48-
for (const instance of cluster.instances) {
54+
for (const instance of fullCluster.instances) {
4955
authStore.setUserForEntity(instance, null);
5056
}
5157
}
58+
authStore.setUserForEntity(cluster, null);
5259
}, [cluster, instanceClient]);
5360
const onTerminateClick = useCallback(() => {
5461
onTerminateClusterModal(cluster);
5562
}, [cluster, onTerminateClusterModal]);
5663

5764
const menuItems = [
5865
isActive && update && (
59-
<Link to={`${cluster.id}/edit`}><DropdownMenuItem>Edit</DropdownMenuItem></Link>),
66+
<Link to={`${cluster.id}/edit`} disabled={signingOut}><DropdownMenuItem>Edit</DropdownMenuItem></Link>),
6067
isActive && view && (
61-
<Link to={`${cluster.id}/instances`}><DropdownMenuItem>Instances</DropdownMenuItem></Link>),
68+
<Link to={`${cluster.id}/instances`} disabled={signingOut}><DropdownMenuItem>Instances</DropdownMenuItem></Link>),
6269
isActive && view && !!operationsUrl && !auth.isLoading && auth.user && (
63-
<DropdownMenuItem onClick={onSignOutClick}>Sign Out</DropdownMenuItem>),
70+
<DropdownMenuItem onClick={onSignOutClick} disabled={signingOut}>Sign Out</DropdownMenuItem>),
6471
notTerminated && remove && (
6572
<DropdownMenuItem
6673
className="bg-red focus:bg-red/70 focus:text-white"

0 commit comments

Comments
 (0)