-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathInstanceLogInCell.tsx
More file actions
78 lines (73 loc) · 2.9 KB
/
InstanceLogInCell.tsx
File metadata and controls
78 lines (73 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import { Button } from '@/components/ui/button';
import { defaultInstanceRoute } from '@/config/constants';
import { useInstanceClient } from '@/config/useInstanceClient';
import { authStore } from '@/features/auth/store/authStore';
import { useInstanceAuth } from '@/hooks/useAuth';
import { useOrganizationClusterInstancePermissions } from '@/hooks/usePermissions';
import { Instance } from '@/integrations/api/api.patch';
import { onInstanceLogoutSubmit } from '@/integrations/api/instance/auth/onInstanceLogoutSubmit';
import { getOperationsUrlForInstance } from '@/lib/urls/getOperationsUrlForInstance';
import { Link } from '@tanstack/react-router';
import { LoaderCircleIcon } from 'lucide-react';
import { useCallback, useMemo } from 'react';
export function InstanceLogInCell(
{ isSelfManaged, instance }: { readonly isSelfManaged: boolean; readonly instance: Instance },
) {
const { user: instanceUser, isLoading: instanceAuthIsLoading } = useInstanceAuth(instance.id);
const operationsUrl = useMemo(() => getOperationsUrlForInstance(instance), [instance]);
const instanceClient = useInstanceClient({ operationsUrl });
const { update } = useOrganizationClusterInstancePermissions();
const isFabricConnect = authStore.checkForFabricConnect(instance.id);
const onSignOutClick = useCallback(async () => {
await onInstanceLogoutSubmit({ instanceClient, entityId: instance.id });
authStore.setUserForEntity(instance, null);
}, [instance, instanceClient]);
if (instanceAuthIsLoading || !['CLONE_READY', 'RUNNING', 'UPDATED'].includes(instance.status)) {
return <LoaderCircleIcon className="animate-spin" color="gray" />;
}
if (!instanceUser || isFabricConnect) {
return (
<span className="flex gap-4">
{update && !isSelfManaged && (
<Link
to={`../instance/${instance.id}${defaultInstanceRoute}`}
className="text-sm"
aria-label={`Connect to ${instance.name} instance`}
title={`Connect to ${instance.name} instance`}
>
<Button variant="positiveOutline">Fabric Connect</Button>
</Link>
)}
<Link
to={`../instance/${instance.id}/sign-in`}
className="text-sm"
aria-label={`Sign in to ${instance.name} instance`}
title={`Sign in to ${instance.name} instance`}
>
<Button variant={update ? 'defaultOutline' : 'positiveOutline'}>Direct Sign In</Button>
</Link>
</span>
);
}
return (
<span className="flex gap-4">
<Link
to={`../instance/${instance.id}${defaultInstanceRoute}`}
className="text-sm"
aria-label={`Go to ${instance.name} instance`}
title={`Go to ${instance.name} instance`}
>
<Button variant="positiveOutline">Direct Connect</Button>
</Link>
<Button
variant="destructiveOutline"
className="text-sm"
aria-label={`Sign out from ${instance.name} instance`}
title={`Sign out from ${instance.name} instance`}
onClick={onSignOutClick}
>
Direct Sign Out
</Button>
</span>
);
}