Merge branch 'master' into 14452-my-account
[arvados-workbench2.git] / src / views / virtual-machine-panel / virtual-machine-panel.tsx
index 6c8955448c64d3a9c1b699d5c04f53a0289af70b..5dbd3f0965aa6336d2893fd7faf48ecba75e43e7 100644 (file)
@@ -13,7 +13,7 @@ import { compose, Dispatch } from 'redux';
 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';
@@ -80,8 +80,8 @@ const mapStateToProps = ({ virtualMachines, auth }: RootState) => {
 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));
     },
 });
 
@@ -96,7 +96,7 @@ interface VirtualMachinesPanelDataProps {
 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>;
@@ -113,7 +113,7 @@ export const VirtualMachinePanel = compose(
                 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>
@@ -148,16 +148,8 @@ const CardContentWithVirtualMachines = (props: VirtualMachineProps) =>
     <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
@@ -195,11 +187,11 @@ const userVirtualMachinesTable = (props: VirtualMachineProps) =>
             {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>
@@ -221,11 +213,11 @@ const adminVirtualMachinesTable = (props: VirtualMachineProps) =>
             {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>
@@ -235,9 +227,8 @@ const adminVirtualMachinesTable = (props: VirtualMachineProps) =>
         </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) =>