X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/892d0e98eeb20624cf49ca408af6156b4d3b0f55..63a5dc75ae9b68b3570e3bee1662155572cf5d1f:/src/views/process-panel/process-panel-root.tsx diff --git a/src/views/process-panel/process-panel-root.tsx b/src/views/process-panel/process-panel-root.tsx index deb5f1b0..388dc746 100644 --- a/src/views/process-panel/process-panel-root.tsx +++ b/src/views/process-panel/process-panel-root.tsx @@ -4,7 +4,6 @@ import React from 'react'; import { Grid, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; -import { ProcessInformationCard } from './process-information-card'; import { DefaultView } from 'components/default-view/default-view'; import { ProcessIcon } from 'components/icon/icon'; import { Process } from 'store/processes/process'; @@ -13,6 +12,18 @@ import { SubprocessFilterDataProps } from 'components/subprocess-filter/subproce import { MPVContainer, MPVPanelContent, MPVPanelState } from 'components/multi-panel-view/multi-panel-view'; import { ArvadosTheme } from 'common/custom-theme'; import { ProcessDetailsCard } from './process-details-card'; +import { ProcessIOCard, ProcessIOCardType, ProcessIOParameter } from './process-io-card'; + +import { getProcessPanelLogs, ProcessLogsPanel } from 'store/process-logs-panel/process-logs-panel'; +import { ProcessLogsCard } from './process-log-card'; +import { FilterOption } from 'views/process-panel/process-log-form'; +import { getInputCollectionMounts } from 'store/processes/processes-actions'; +import { WorkflowInputsData } from 'models/workflow'; +import { CommandOutputParameter } from 'cwlts/mappings/v1.0/CommandOutputParameter'; +import { AuthState } from 'store/auth/auth-reducer'; +import { ProcessCmdCard } from './process-cmd-card'; +import { ContainerRequestResource } from 'models/container-request'; +import { OutputDetails } from 'store/process-panel/process-panel'; type CssRules = 'root'; @@ -26,42 +37,125 @@ export interface ProcessPanelRootDataProps { process?: Process; subprocesses: Array; filters: Array; + processLogsPanel: ProcessLogsPanel; + auth: AuthState; + inputRaw: WorkflowInputsData | null; + inputParams: ProcessIOParameter[] | null; + outputRaw: OutputDetails | null; + outputDefinitions: CommandOutputParameter[]; + outputParams: ProcessIOParameter[] | null; } export interface ProcessPanelRootActionProps { onContextMenu: (event: React.MouseEvent, process: Process) => void; onToggle: (status: string) => void; - openProcessInputDialog: (uuid: string) => void; - navigateToOutput: (uuid: string) => void; - navigateToWorkflow: (uuid: string) => void; cancelProcess: (uuid: string) => void; + onLogFilterChange: (filter: FilterOption) => void; + navigateToLog: (uuid: string) => void; + onCopyToClipboard: (uuid: string) => void; + loadInputs: (containerRequest: ContainerRequestResource) => void; + loadOutputs: (containerRequest: ContainerRequestResource) => void; + loadOutputDefinitions: (containerRequest: ContainerRequestResource) => void; + updateOutputParams: () => void; } export type ProcessPanelRootProps = ProcessPanelRootDataProps & ProcessPanelRootActionProps & WithStyles; const panelsData: MPVPanelState[] = [ - {name: "Info"}, - {name: "Details", visible: false}, + {name: "Details"}, + {name: "Command"}, + {name: "Logs", visible: true}, + {name: "Inputs"}, + {name: "Outputs"}, {name: "Subprocesses"}, ]; -export const ProcessPanelRoot = withStyles(styles)(({ process, ...props }: ProcessPanelRootProps) => - process +export const ProcessPanelRoot = withStyles(styles)( + ({ + process, + auth, + processLogsPanel, + inputRaw, + inputParams, + outputRaw, + outputDefinitions, + outputParams, + loadInputs, + loadOutputs, + loadOutputDefinitions, + updateOutputParams, + ...props + }: ProcessPanelRootProps) => { + + const outputUuid = process?.containerRequest.outputUuid; + const containerRequest = process?.containerRequest; + const inputMounts = getInputCollectionMounts(process?.containerRequest); + + React.useEffect(() => { + if (containerRequest) { + // Load inputs from mounts or props + loadInputs(containerRequest); + // Fetch raw output (loads from props or keep) + loadOutputs(containerRequest); + // Loads output definitions from mounts into store + loadOutputDefinitions(containerRequest); + } + }, [containerRequest, loadInputs, loadOutputs, loadOutputDefinitions]); + + // Trigger processing output params when raw or definitions change + React.useEffect(() => { + updateOutputParams(); + }, [outputRaw, outputDefinitions, updateOutputParams]); + + return process ? - - + props.onContextMenu(event, process)} - openProcessInputDialog={props.openProcessInputDialog} - navigateToOutput={props.navigateToOutput} - openWorkflow={props.navigateToWorkflow} cancelProcess={props.cancelProcess} /> - - + + - + + ({ label: filter, value: filter }) + )} + onLogFilterChange={props.onLogFilterChange} + navigateToLog={props.navigateToLog} + /> + + + + + + + + @@ -72,5 +166,6 @@ export const ProcessPanelRoot = withStyles(styles)(({ process, ...props }: Proce - ); - + ; + } +);