1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { Link } from 'react-router-dom';
8 StyleRulesCallback, WithStyles, withStyles, Card,
9 CardHeader, IconButton, CardContent, Grid, Typography, Tooltip
10 } from '@material-ui/core';
11 import { Process } from '~/store/processes/process';
12 import { ProcessLogCodeSnippet } from '~/views/process-log-panel/process-log-code-snippet';
13 import { ProcessLogForm, ProcessLogFormDataProps, ProcessLogFormActionProps } from '~/views/process-log-panel/process-log-form';
14 import { MoreOptionsIcon, ProcessIcon } from '~/components/icon/icon';
15 import { ArvadosTheme } from '~/common/custom-theme';
16 import { CodeSnippetDataProps } from '~/components/code-snippet/code-snippet';
17 import { BackIcon } from '~/components/icon/icon';
18 import { DefaultView } from '~/components/default-view/default-view';
19 import { openContextMenu } from '../../store/context-menu/context-menu-actions';
21 type CssRules = 'backLink' | 'backIcon' | 'card' | 'title' | 'iconHeader' | 'link';
23 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
29 textDecoration: 'none',
30 padding: theme.spacing.unit,
31 color: theme.palette.grey["700"],
34 marginRight: theme.spacing.unit
40 color: theme.palette.grey["700"]
44 color: theme.customs.colors.green700
47 alignSelf: 'flex-end',
53 interface ProcessLogMainCardDataProps {
57 export interface ProcessLogMainCardActionProps {
58 onContextMenu: (event: React.MouseEvent<any>, process: Process) => void;
61 export type ProcessLogMainCardProps = ProcessLogMainCardDataProps
62 & ProcessLogMainCardActionProps
63 & CodeSnippetDataProps
64 & ProcessLogFormDataProps
65 & ProcessLogFormActionProps;
67 export const ProcessLogMainCard = withStyles(styles)(
68 ({ classes, process, selectedFilter, filters, onChange, lines, onContextMenu }: ProcessLogMainCardProps & WithStyles<CssRules>) =>
70 <Link to={`/processes/${process.containerRequest.uuid}`} className={classes.backLink}>
71 <BackIcon className={classes.backIcon} /> Back
73 <Card className={classes.card}>
75 avatar={<ProcessIcon className={classes.iconHeader} />}
77 <IconButton onClick={event => onContextMenu(event, process)} aria-label="More options">
78 <Tooltip title="More options">
83 <Tooltip title={process.containerRequest.name} placement="bottom-start">
84 <Typography noWrap variant="title" className={classes.title}>
85 {process.containerRequest.name}
88 subheader={process.containerRequest.description} />
97 <ProcessLogForm selectedFilter={selectedFilter} filters={filters} onChange={onChange} />
99 <Grid item xs={6} className={classes.link}>
100 <Typography component='div'>
106 <ProcessLogCodeSnippet lines={lines} />
111 messages={['No logs yet']} />