1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
7 StyleRulesCallback, WithStyles, withStyles, Card,
8 CardHeader, IconButton, CardContent, Grid, Chip, Typography, Tooltip
9 } from '@material-ui/core';
10 import { ArvadosTheme } from '~/common/custom-theme';
11 import { MoreOptionsIcon, ProcessIcon } from '~/components/icon/icon';
12 import { DetailsAttribute } from '~/components/details-attribute/details-attribute';
13 import { Process, getProcessStatusColor } from '~/store/processes/process';
14 import { getProcessStatus } from '~/store/processes/process';
17 type CssRules = 'card' | 'iconHeader' | 'label' | 'value' | 'chip' | 'link' | 'content' | 'title' | 'avatar';
19 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
21 marginBottom: theme.spacing.unit * 2
25 color: theme.customs.colors.green700,
28 alignSelf: 'flex-start',
29 paddingTop: theme.spacing.unit * 0.5
33 justifyContent: 'flex-end',
35 marginRight: theme.spacing.unit * 3,
36 paddingRight: theme.spacing.unit
39 textTransform: 'none',
44 color: theme.palette.primary.main,
50 height: theme.spacing.unit * 3,
51 width: theme.spacing.unit * 12,
52 color: theme.palette.common.white,
54 borderRadius: theme.spacing.unit * 0.625,
58 paddingBottom: theme.spacing.unit * 2,
64 paddingTop: theme.spacing.unit * 0.5
68 export interface ProcessInformationCardDataProps {
70 onContextMenu: (event: React.MouseEvent<HTMLElement>) => void;
73 type ProcessInformationCardProps = ProcessInformationCardDataProps & WithStyles<CssRules>;
75 export const ProcessInformationCard = withStyles(styles, { withTheme: true })(
76 ({ classes, process, onContextMenu, theme }: ProcessInformationCardProps) =>
77 <Card className={classes.card}>
80 content: classes.title,
81 avatar: classes.avatar
83 avatar={<ProcessIcon className={classes.iconHeader} />}
86 <Chip label={getProcessStatus(process)}
87 className={classes.chip}
88 style={{ backgroundColor: getProcessStatusColor(getProcessStatus(process), theme as ArvadosTheme) }}/>
90 aria-label="More options"
91 onClick={event => onContextMenu(event)}>
97 <Tooltip title={process.containerRequest.name} placement="bottom-start" color='inherit'>
98 <Typography noWrap variant="title">
99 {process.containerRequest.name}
103 subheader={process.containerRequest.description} />
104 <CardContent className={classes.content}>
107 <DetailsAttribute classLabel={classes.label} classValue={classes.value}
108 label='From' value={process.container ? process.container.startedAt : 'N/A'} />
109 <DetailsAttribute classLabel={classes.label} classValue={classes.value}
110 label='To' value={process.container ? process.container.finishedAt : 'N/A'} />
111 <DetailsAttribute classLabel={classes.label} classValue={classes.link}
112 label='Workflow' value='???' />
115 <DetailsAttribute classLabel={classes.link} label='Outputs' />
116 <DetailsAttribute classLabel={classes.link} label='Inputs' />