-
Notifications
You must be signed in to change notification settings - Fork 21
/
VirtualMachinesOverviewTabDetailsTitle.tsx
64 lines (57 loc) · 2.74 KB
/
VirtualMachinesOverviewTabDetailsTitle.tsx
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
import * as React from 'react';
import { Link } from 'react-router-dom';
import { V1VirtualMachine } from '@kubevirt-ui/kubevirt-api/kubevirt';
import useSSHService from '@kubevirt-utils/components/SSHAccess/useSSHService';
import useSSHCommand from '@kubevirt-utils/components/UserCredentials/useSSHCommand';
import { useKubevirtTranslation } from '@kubevirt-utils/hooks/useKubevirtTranslation';
import { useVMIAndPodsForVM } from '@kubevirt-utils/resources/vm/hooks';
import { CardTitle, Dropdown, DropdownItem, KebabToggle } from '@patternfly/react-core';
import { CopyIcon } from '@patternfly/react-icons';
import { pauseVM, startVM, stopVM, unpauseVM } from '../../../../../../actions/actions';
import { printableVMStatus } from '../../../../../../utils';
import { createURL } from '../../../utils/url';
type VirtualMachinesOverviewTabDetailsTitleProps = {
vm: V1VirtualMachine;
};
const VirtualMachinesOverviewTabDetailsTitle: React.FC<
VirtualMachinesOverviewTabDetailsTitleProps
> = ({ vm }) => {
const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);
const { t } = useKubevirtTranslation();
const { vmi } = useVMIAndPodsForVM(vm?.metadata?.name, vm?.metadata?.namespace);
const [sshService] = useSSHService(vm);
const { command } = useSSHCommand(vmi, sshService);
const isMachinePaused = vm?.status?.printableStatus === printableVMStatus.Paused;
const isMachineStopped = vm?.status?.printableStatus === printableVMStatus.Stopped;
const isMachineRunning = vm?.status?.printableStatus === printableVMStatus.Running;
return (
<CardTitle className="text-muted card-title">
<Link to={createURL('details', location?.pathname)}>{t('Details')}</Link>
<Dropdown
onSelect={() => setIsDropdownOpen(false)}
toggle={<KebabToggle onToggle={setIsDropdownOpen} id="toggle-id-disk" />}
isOpen={isDropdownOpen}
isPlain
dropdownItems={[
<DropdownItem
onClick={() => command && navigator.clipboard.writeText(command)}
key="copy"
isDisabled={!isMachineRunning || !sshService}
>
{t('Copy SSH command')}{' '}
<span className="text-muted">
<CopyIcon />
</span>
</DropdownItem>,
<DropdownItem onClick={() => (isMachineStopped ? startVM(vm) : stopVM(vm))} key="stop">
{isMachineStopped ? t('Resume VirtualMachine') : t('Stop VirtualMachine')}
</DropdownItem>,
<DropdownItem onClick={() => (isMachinePaused ? unpauseVM(vm) : pauseVM(vm))} key="pause">
{isMachinePaused ? t('Unpause VirtualMachine') : t('Pause VirtualMachine')}
</DropdownItem>,
]}
/>
</CardTitle>
);
};
export default VirtualMachinesOverviewTabDetailsTitle;