X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/02fa1acae263e5cf28e95a36801cb578be941307..18425d0dfa8a652fef8377a6fb09018f55d2beec:/src/views/process-panel/process-information-card.tsx diff --git a/src/views/process-panel/process-information-card.tsx b/src/views/process-panel/process-information-card.tsx index 01bb3ae7..4fcbf257 100644 --- a/src/views/process-panel/process-information-card.tsx +++ b/src/views/process-panel/process-information-card.tsx @@ -2,24 +2,39 @@ // // SPDX-License-Identifier: AGPL-3.0 -import * as React from 'react'; +import React from 'react'; import { - StyleRulesCallback, WithStyles, withStyles, Card, - CardHeader, IconButton, CardContent, Grid, Chip, Typography, Tooltip + StyleRulesCallback, + WithStyles, + withStyles, + Card, + CardHeader, + IconButton, + CardContent, + Grid, + Typography, + Tooltip } from '@material-ui/core'; -import { ArvadosTheme } from '~/common/custom-theme'; -import { MoreOptionsIcon, ProcessIcon } from '~/components/icon/icon'; -import { DetailsAttribute } from '~/components/details-attribute/details-attribute'; -import { Process } from '~/store/processes/process'; -import { getProcessStatus, getProcessStatusColor } from '../../store/processes/process'; -import { formatDate } from '~/common/formatters'; +import { ArvadosTheme } from 'common/custom-theme'; +import { CloseIcon, MoreOptionsIcon, ProcessIcon } from 'components/icon/icon'; +import { DetailsAttribute } from 'components/details-attribute/details-attribute'; +import { Process } from 'store/processes/process'; +import { formatDate } from 'common/formatters'; +import classNames from 'classnames'; +import { ContainerState } from 'models/container'; +import { MPVPanelProps } from 'components/multi-panel-view/multi-panel-view'; +import { ProcessRuntimeStatus } from 'views-components/process-runtime-status/process-runtime-status'; +import { ProcessStatus } from 'views-components/data-explorer/renderers'; - -type CssRules = 'card' | 'iconHeader' | 'label' | 'value' | 'chip' | 'link' | 'content' | 'title' | 'avatar'; +type CssRules = 'card' | 'iconHeader' | 'label' | 'value' | 'link' | 'content' | 'title' | 'avatar' | 'cancelButton' | 'header'; const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ card: { - marginBottom: theme.spacing.unit * 2 + height: '100%' + }, + header: { + paddingTop: theme.spacing.unit, + paddingBottom: theme.spacing.unit, }, iconHeader: { fontSize: '1.875rem', @@ -31,7 +46,7 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ }, label: { display: 'flex', - justifyContent: 'flex-end', + justifyContent: 'flex-start', fontSize: '0.875rem', marginRight: theme.spacing.unit * 3, paddingRight: theme.spacing.unit @@ -47,36 +62,47 @@ const styles: StyleRulesCallback = (theme: ArvadosTheme) => ({ cursor: 'pointer' } }, - chip: { - height: theme.spacing.unit * 3, - width: theme.spacing.unit * 12, - color: theme.palette.common.white, - fontSize: '0.875rem', - borderRadius: theme.spacing.unit * 0.625, - }, content: { + paddingTop: '0px', + paddingLeft: theme.spacing.unit * 1, + paddingRight: theme.spacing.unit * 1, '&:last-child': { - paddingBottom: theme.spacing.unit * 2, - paddingTop: '0px' + paddingBottom: theme.spacing.unit * 1, } }, title: { overflow: 'hidden', paddingTop: theme.spacing.unit * 0.5 + }, + cancelButton: { + paddingRight: theme.spacing.unit * 2, + fontSize: '14px', + color: theme.customs.colors.red900, + "&:hover": { + cursor: 'pointer' + } } }); export interface ProcessInformationCardDataProps { process: Process; onContextMenu: (event: React.MouseEvent) => void; + openProcessInputDialog: (uuid: string) => void; + navigateToOutput: (uuid: string) => void; + openWorkflow: (uuid: string) => void; + cancelProcess: (uuid: string) => void; } -type ProcessInformationCardProps = ProcessInformationCardDataProps & WithStyles; +type ProcessInformationCardProps = ProcessInformationCardDataProps & WithStyles & MPVPanelProps; export const ProcessInformationCard = withStyles(styles, { withTheme: true })( - ({ classes, process, onContextMenu, theme }: ProcessInformationCardProps) => - + ({ classes, process, onContextMenu, theme, openProcessInputDialog, navigateToOutput, openWorkflow, cancelProcess, doHidePanel, panelName }: ProcessInformationCardProps) => { + const { container } = process; + const startedAt = container ? formatDate(container.startedAt) : 'N/A'; + const finishedAt = container ? formatDate(container.finishedAt) : 'N/A'; + return } action={
- - onContextMenu(event)}> - - + {process.container && process.container.state === ContainerState.RUNNING && + cancelProcess(process.containerRequest.uuid)}>Cancel} + + + onContextMenu(event)}> + + + + { doHidePanel && + + + }
} - title={ - - - {process.containerRequest.name} - - + title={ !!process.containerRequest.name && + + {process.containerRequest.name} + } subheader={ - - - {process.containerRequest.description || '(no-description)'} - - } /> + + {process.containerRequest.description} + + } + /> + + + + label='Started at' + value={startedAt} /> - + label='Finished at' + value={finishedAt} /> + {process.containerRequest.properties.workflowUuid && + openWorkflow(process.containerRequest.properties.workflowUuid)}> + + } - - + navigateToOutput(process.containerRequest.outputUuid!)}> + + + openProcessInputDialog(process.containerRequest.uuid)}> + + -
-); \ No newline at end of file +
; + } +);