1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as React from 'react';
6 import { StyleRulesCallback, WithStyles, withStyles, CardContent, Tab, Tabs, Paper } from '@material-ui/core';
7 import { ArvadosTheme } from '~/common/custom-theme';
8 import { WorkflowIcon } from '~/components/icon/icon';
9 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
10 import { WorkflowResource, parseWorkflowDefinition, getWorkflowInputs, stringifyInputType } from '~/models/workflow';
11 import { DetailsAttribute } from '~/components/details-attribute/details-attribute';
13 export type CssRules = 'root' | 'tab';
15 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
24 interface WorkflowDetailsCardDataProps {
25 workflow?: WorkflowResource;
28 type WorkflowDetailsCardProps = WorkflowDetailsCardDataProps & WithStyles<CssRules>;
30 export const WorkflowDetailsCard = withStyles(styles)(
31 class extends React.Component<WorkflowDetailsCardProps> {
36 handleChange = (event: React.MouseEvent<HTMLElement>, value: number) => {
37 this.setState({ value });
41 const { classes, workflow } = this.props;
42 const { value } = this.state;
43 return <Paper className={classes.root}>
44 <Tabs value={value} onChange={this.handleChange} centered={true}>
45 <Tab className={classes.tab} label="Description" />
46 <Tab className={classes.tab} label="Inputs" />
48 {value === 0 && <CardContent>
50 ? workflow.description
51 : <DataTableDefaultView
53 messages={['Please select a workflow to see its description.']} />}
55 {value === 1 && <CardContent>
56 {workflow && this.inputs
57 ? this.inputs.map(input => <DetailsAttribute key={input.id} label={input.label || ''} value={stringifyInputType(input)} />)
58 : <DataTableDefaultView
60 messages={['Please select a workflow to see its description.']} />}
66 if (this.props.workflow) {
67 const definition = parseWorkflowDefinition(this.props.workflow);
69 return getWorkflowInputs(definition);