X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/8f5b7486c0f30337f5fc0b9b31b4cceaef7e08b1..88b93fd119eecca0247a9bb5a6fe14015d582826:/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 5174d300..ed808b36 100644 --- a/src/views/process-panel/process-panel-root.tsx +++ b/src/views/process-panel/process-panel-root.tsx @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -import React, { useState } from 'react'; +import React from 'react'; import { Grid, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; import { DefaultView } from 'components/default-view/default-view'; import { ProcessIcon } from 'components/icon/icon'; @@ -12,16 +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 { getIOParamDisplayValue, ProcessIOCard, ProcessIOCardType, ProcessIOParameter } from './process-io-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 { getInputs, getInputCollectionMounts, getOutputParameters } from 'store/processes/processes-actions'; -import { CommandInputParameter, getIOParamId } from 'models/workflow'; +import { getInputCollectionMounts } from 'store/processes/processes-actions'; +import { CommandInputParameter } 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'; @@ -37,6 +39,11 @@ export interface ProcessPanelRootDataProps { filters: Array; processLogsPanel: ProcessLogsPanel; auth: AuthState; + inputRaw: CommandInputParameter[] | null; + inputParams: ProcessIOParameter[] | null; + outputRaw: OutputDetails | null; + outputDefinitions: CommandOutputParameter[]; + outputParams: ProcessIOParameter[] | null; } export interface ProcessPanelRootActionProps { @@ -46,16 +53,14 @@ export interface ProcessPanelRootActionProps { onLogFilterChange: (filter: FilterOption) => void; navigateToLog: (uuid: string) => void; onCopyToClipboard: (uuid: string) => void; - fetchOutputs: (uuid: string, fetchOutputs) => void; + loadInputs: (containerRequest: ContainerRequestResource) => void; + loadOutputs: (containerRequest: ContainerRequestResource) => void; + loadOutputDefinitions: (containerRequest: ContainerRequestResource) => void; + updateOutputParams: () => void; } export type ProcessPanelRootProps = ProcessPanelRootDataProps & ProcessPanelRootActionProps & WithStyles; -type OutputDetails = { - rawOutputs?: any; - pdh?: string; -} - const panelsData: MPVPanelState[] = [ {name: "Details"}, {name: "Command"}, @@ -66,42 +71,41 @@ const panelsData: MPVPanelState[] = [ ]; export const ProcessPanelRoot = withStyles(styles)( - ({ process, auth, processLogsPanel, fetchOutputs, ...props }: ProcessPanelRootProps) => { - - const [outputDetails, setOutputs] = useState({}); - const [rawInputs, setInputs] = useState([]); - - - const [processedOutputs, setProcessedOutputs] = useState([]); - const [processedInputs, setProcessedInputs] = useState([]); + ({ + process, + auth, + processLogsPanel, + inputRaw, + inputParams, + outputRaw, + outputDefinitions, + outputParams, + loadInputs, + loadOutputs, + loadOutputDefinitions, + updateOutputParams, + ...props + }: ProcessPanelRootProps) => { const outputUuid = process?.containerRequest.outputUuid; - const requestUuid = process?.containerRequest.uuid; - + const containerRequest = process?.containerRequest; const inputMounts = getInputCollectionMounts(process?.containerRequest); React.useEffect(() => { - if (outputUuid) { - fetchOutputs(outputUuid, setOutputs); + 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); } - }, [outputUuid, fetchOutputs]); + }, [containerRequest, loadInputs, loadOutputs, loadOutputDefinitions]); + // Trigger processing output params when raw or definitions change React.useEffect(() => { - if (outputDetails.rawOutputs && process) { - const outputDefinitions = getOutputParameters(process.containerRequest); - setProcessedOutputs(formatOutputData(outputDefinitions, outputDetails.rawOutputs, outputDetails.pdh, auth)); - } else { - setProcessedOutputs([]); - } - }, [outputDetails, auth, process]); - - React.useEffect(() => { - if (process) { - const rawInputs = getInputs(process.containerRequest); - setInputs(rawInputs); - setProcessedInputs(formatInputData(rawInputs, auth)); - } - }, [requestUuid, auth, process]); + updateOutputParams(); + }, [outputRaw, outputDefinitions, updateOutputParams]); return process ? @@ -117,7 +121,7 @@ export const ProcessPanelRoot = withStyles(styles)( onCopy={props.onCopyToClipboard} process={process} /> - + - + - + @@ -165,23 +169,3 @@ export const ProcessPanelRoot = withStyles(styles)( ; } ); - -const formatInputData = (inputs: CommandInputParameter[], auth: AuthState): ProcessIOParameter[] => { - return inputs.map(input => { - return { - id: getIOParamId(input), - label: input.label || "", - value: getIOParamDisplayValue(auth, input) - }; - }); -}; - -const formatOutputData = (definitions: CommandOutputParameter[], values: any, pdh: string | undefined, auth: AuthState): ProcessIOParameter[] => { - return definitions.map(output => { - return { - id: getIOParamId(output), - label: output.label || "", - value: getIOParamDisplayValue(auth, Object.assign(output, { value: values[getIOParamId(output)] || [] }), pdh) - }; - }); -};