16672: Initial Log viewer placement on process panel. WIP
[arvados-workbench2.git] / src / views / process-log-panel / process-log-main-card.tsx
index 9b75d112b737e6ccc86aa5fa2ad85d137fb8c4e5..aab44da44e2db5d0d7d30cd511eedb3918459084 100644 (file)
@@ -2,26 +2,36 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import * as React from 'react';
-import { Link } from 'react-router-dom';
+import React from 'react';
 import {
-    StyleRulesCallback, WithStyles, withStyles, Card,
-    CardHeader, IconButton, CardContent, Grid, Typography, Tooltip
+    StyleRulesCallback,
+    WithStyles,
+    withStyles,
+    Card,
+    CardHeader,
+    IconButton,
+    CardContent,
+    Grid,
+    Typography,
+    Tooltip
 } from '@material-ui/core';
-import { Process } from '~/store/processes/process';
-import { ProcessLogCodeSnippet } from '~/views/process-log-panel/process-log-code-snippet';
-import { ProcessLogForm, ProcessLogFormDataProps, ProcessLogFormActionProps } from '~/views/process-log-panel/process-log-form';
-import { MoreOptionsIcon, ProcessIcon } from '~/components/icon/icon';
-import { ArvadosTheme } from '~/common/custom-theme';
-import { CodeSnippetDataProps } from '~/components/code-snippet/code-snippet';
-import { BackIcon } from '~/components/icon/icon';
-import { DefaultView } from '~/components/default-view/default-view';
+import { Process } from 'store/processes/process';
+import { ProcessLogCodeSnippet } from 'views/process-log-panel/process-log-code-snippet';
+import {
+    ProcessLogForm,
+    ProcessLogFormDataProps,
+    ProcessLogFormActionProps
+} from 'views/process-log-panel/process-log-form';
+import { MoreOptionsIcon, LogIcon } from 'components/icon/icon';
+import { ArvadosTheme } from 'common/custom-theme';
+import { CodeSnippetDataProps } from 'components/code-snippet/code-snippet';
+import { DefaultView } from 'components/default-view/default-view';
 
 type CssRules = 'backLink' | 'backIcon' | 'card' | 'title' | 'iconHeader' | 'link';
 
 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
     backLink: {
-        fontSize: '1rem',
+        fontSize: '14px',
         fontWeight: 600,
         display: 'flex',
         alignItems: 'center',
@@ -43,18 +53,22 @@ const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
         color: theme.customs.colors.green700
     },
     link: {
-        alignSelf: 'flex-end',
-        textAlign: 'right'
+        fontSize: '0.875rem',
+        color: theme.palette.primary.main,
+        textAlign: 'right',
+        '&:hover': {
+            cursor: 'pointer'
+        }
     }
 });
 
-
 interface ProcessLogMainCardDataProps {
     process: Process;
 }
 
 export interface ProcessLogMainCardActionProps {
     onContextMenu: (event: React.MouseEvent<any>, process: Process) => void;
+    navigateToLogCollection: (uuid: string) => void;
 }
 
 export type ProcessLogMainCardProps = ProcessLogMainCardDataProps
@@ -64,14 +78,11 @@ export type ProcessLogMainCardProps = ProcessLogMainCardDataProps
     & ProcessLogFormActionProps;
 
 export const ProcessLogMainCard = withStyles(styles)(
-    ({ classes, process, selectedFilter, filters, onChange, lines, onContextMenu }: ProcessLogMainCardProps & WithStyles<CssRules>) =>
+    ({ classes, process, selectedFilter, filters, onChange, lines, onContextMenu, navigateToLogCollection }: ProcessLogMainCardProps & WithStyles<CssRules>) =>
         <Grid item xs={12}>
-            <Link to={`/processes/${process.containerRequest.uuid}`} className={classes.backLink}>
-                <BackIcon className={classes.backIcon} /> Back
-            </Link>
             <Card className={classes.card}>
                 <CardHeader
-                    avatar={<ProcessIcon className={classes.iconHeader} />}
+                    avatar={<LogIcon className={classes.iconHeader} />}
                     action={
                         <Tooltip title="More options" disableFocusListener>
                             <IconButton onClick={event => onContextMenu(event, process)} aria-label="More options">
@@ -79,12 +90,10 @@ export const ProcessLogMainCard = withStyles(styles)(
                             </IconButton>
                         </Tooltip>}
                     title={
-                        <Tooltip title={process.containerRequest.name} placement="bottom-start">
-                            <Typography noWrap variant='h6' className={classes.title}>
-                                {process.containerRequest.name}
-                            </Typography>
-                        </Tooltip>}
-                    subheader={process.containerRequest.description} />
+                        <Typography noWrap variant='h6' className={classes.title}>
+                            Logs for {process.containerRequest.name}
+                        </Typography>}
+                />
                 <CardContent>
                     {lines.length > 0
                         ? < Grid
@@ -96,9 +105,9 @@ export const ProcessLogMainCard = withStyles(styles)(
                                     <ProcessLogForm selectedFilter={selectedFilter} filters={filters} onChange={onChange} />
                                 </Grid>
                                 <Grid item xs={6} className={classes.link}>
-                                    <Typography component='div'>
+                                    <span onClick={() => navigateToLogCollection(process.containerRequest.logUuid!)}>
                                         Go to Log collection
-                                </Typography>
+                                    </span>
                                 </Grid>
                             </Grid>
                             <Grid item xs>
@@ -106,7 +115,7 @@ export const ProcessLogMainCard = withStyles(styles)(
                             </Grid>
                         </Grid>
                         : <DefaultView
-                            icon={ProcessIcon}
+                            icon={LogIcon}
                             messages={['No logs yet']} />
                     }
                 </CardContent>