@@ -10,6 +10,7 @@ import {
1010} from '@/components/ui/dropdownMenu' ;
1111import { renderBadgeStatusText , renderBadgeStatusVariant } from '@/components/ui/utils/badgeStatus' ;
1212import { useInstanceClient } from '@/config/useInstanceClient' ;
13+ import { getClusterInfo } from '@/features/cluster/queries/getClusterInfoQuery' ;
1314import { ClusterCardAction } from '@/features/clusters/components/ClusterCardAction' ;
1415import { onInstanceLogoutSubmit } from '@/features/instance/operations/mutations/onInstanceLogoutSubmit' ;
1516import { useInstanceAuth } from '@/hooks/useAuth' ;
@@ -20,7 +21,7 @@ import { authStore } from '@/lib/authStore';
2021import { getOperationsUrlForCluster } from '@/lib/urls/getOperationsUrlForCluster' ;
2122import { Link } from '@tanstack/react-router' ;
2223import { Ellipsis } from 'lucide-react' ;
23- import { useCallback , useMemo } from 'react' ;
24+ import { useCallback , useMemo , useState } from 'react' ;
2425
2526const activeClusterStatuses = [ 'RUNNING' ] ;
2627const 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