import { saveRequestedDate, loadVirtualMachinesData } from '~/store/virtual-machines/virtual-machines-actions';
import { RootState } from '~/store/store';
import { ListResults } from '~/services/common-service/common-resource-service';
-import { HelpIcon, MoreOptionsIcon, AddIcon } from '~/components/icon/icon';
+import { HelpIcon, MoreOptionsIcon } from '~/components/icon/icon';
import { VirtualMachineLogins, VirtualMachinesResource } from '~/models/virtual-machines';
import { Routes } from '~/routes/routes';
import { openVirtualMachinesContextMenu } from '~/store/context-menu/context-menu-actions';
const mapDispatchToProps = (dispatch: Dispatch): Pick<VirtualMachinesPanelActionProps, 'loadVirtualMachinesData' | 'saveRequestedDate' | 'onOptionsMenuOpen'> => ({
saveRequestedDate: () => dispatch<any>(saveRequestedDate()),
loadVirtualMachinesData: () => dispatch<any>(loadVirtualMachinesData()),
- onOptionsMenuOpen: (event, index, virtualMachine) => {
- dispatch<any>(openVirtualMachinesContextMenu(event, index, virtualMachine));
+ onOptionsMenuOpen: (event, virtualMachine) => {
+ dispatch<any>(openVirtualMachinesContextMenu(event, virtualMachine));
},
});
interface VirtualMachinesPanelActionProps {
saveRequestedDate: () => void;
loadVirtualMachinesData: () => string;
- onOptionsMenuOpen: (event: React.MouseEvent<HTMLElement>, index: number, virtualMachine: VirtualMachinesResource) => void;
+ onOptionsMenuOpen: (event: React.MouseEvent<HTMLElement>, virtualMachine: VirtualMachinesResource) => void;
}
type VirtualMachineProps = VirtualMachinesPanelActionProps & VirtualMachinesPanelDataProps & WithStyles<CssRules>;
const { virtualMachines, links, isAdmin } = this.props;
return (
<Grid container spacing={16}>
- {virtualMachines.itemsAvailable === 0 && <CardContentWithNoVirtualMachines {...this.props} />}
+ {!isAdmin && virtualMachines.itemsAvailable > 0 && <CardContentWithNoVirtualMachines {...this.props} />}
{virtualMachines.itemsAvailable > 0 && links.itemsAvailable > 0 && <CardContentWithVirtualMachines {...this.props} />}
{!isAdmin && <CardSSHSection {...this.props} />}
</Grid>
<Grid item xs={12}>
<Card>
<CardContent>
- {props.isAdmin ?
- <span>
- <div className={props.classes.rightAlign}>
- <Button variant="contained" color="primary" className={props.classes.button} onClick={props.saveRequestedDate}>
- <AddIcon /> NEW VIRTUAL MACHINE
- </Button>
- </div>
- {adminVirtualMachinesTable(props)}
- </span> :
- <span>
+ {props.isAdmin ? <span>{adminVirtualMachinesTable(props)}</span>
+ : <span>
<div className={props.classes.rightAlign}>
<Button variant="contained" color="primary" className={props.classes.button} onClick={props.saveRequestedDate}>
SEND REQUEST FOR SHELL ACCESS
{props.virtualMachines.items.map((it, index) =>
<TableRow key={index}>
<TableCell>{it.hostname}</TableCell>
- <TableCell>{getUsername(props.links, it)}</TableCell>
- <TableCell>ssh {getUsername(props.links, it)}@shell.arvados</TableCell>
+ <TableCell>{getUsername(props.links)}</TableCell>
+ <TableCell>ssh {getUsername(props.links)}@{it.hostname}.arvados</TableCell>
<TableCell>
- <a href={`https://workbench.c97qk.arvadosapi.com${it.href}/webshell/${getUsername(props.links, it)}`} target="_blank" className={props.classes.link}>
- Log in as {getUsername(props.links, it)}
+ <a href={`https://workbench.c97qk.arvadosapi.com${it.href}/webshell/${getUsername(props.links)}`} target="_blank" className={props.classes.link}>
+ Log in as {getUsername(props.links)}
</a>
</TableCell>
</TableRow>
{props.logins.items.length > 0 && props.virtualMachines.items.map((it, index) =>
<TableRow key={index}>
<TableCell>{it.uuid}</TableCell>
- <TableCell>{props.logins.items[0].hostname}</TableCell>
+ <TableCell>{it.hostname}</TableCell>
<TableCell>["{props.logins.items[0].username}"]</TableCell>
<TableCell className={props.classes.moreOptions}>
<Tooltip title="More options" disableFocusListener>
- <IconButton onClick={event => props.onOptionsMenuOpen(event, index, it)} className={props.classes.moreOptionsButton}>
+ <IconButton onClick={event => props.onOptionsMenuOpen(event, it)} className={props.classes.moreOptionsButton}>
<MoreOptionsIcon />
</IconButton>
</Tooltip>
</TableBody>
</Table>;
-const getUsername = (links: ListResults<any>, virtualMachine: VirtualMachinesResource) => {
- const link = links.items.find((item: any) => item.headUuid === virtualMachine.uuid);
- return link.properties.username || undefined;
+const getUsername = (links: ListResults<any>) => {
+ return links.items[0].properties.username;
};
const CardSSHSection = (props: VirtualMachineProps) =>