From: Peter Amstutz Date: Mon, 23 May 2022 21:19:17 +0000 (-0400) Subject: 19143: Finally got the data binding to work X-Git-Tag: 2.4.1~1^2~1^2~5 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/2129d2a8fc553a0e89b374bdad2226ff3b3d377e 19143: Finally got the data binding to work Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- diff --git a/src/store/processes/processes-actions.ts b/src/store/processes/processes-actions.ts index 11106e49..213e292b 100644 --- a/src/store/processes/processes-actions.ts +++ b/src/store/processes/processes-actions.ts @@ -18,6 +18,8 @@ import { RUN_PROCESS_BASIC_FORM, RunProcessBasicFormData } from "views/run-proce import { RunProcessAdvancedFormData, RUN_PROCESS_ADVANCED_FORM } from "views/run-process-panel/run-process-advanced-form"; import { MOUNT_PATH_CWL_WORKFLOW, MOUNT_PATH_CWL_INPUT } from 'models/process'; import { getWorkflow, getWorkflowInputs } from "models/workflow"; +import { ProjectResource } from "models/project"; +import { UserResource } from "models/user"; export const loadProcess = (containerRequestUuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise => { @@ -60,7 +62,8 @@ export const reRunProcess = (processUuid: string, workflowUuid: string) => const stringifiedDefinition = JSON.stringify(process.mounts[MOUNT_PATH_CWL_WORKFLOW].content); const newWorkflow = { ...workflow, definition: stringifiedDefinition }; - const basicInitialData: RunProcessBasicFormData = { name: `Copy of: ${process.name}`, description: process.description, ownerUuid: workflow.ownerUuid }; + const owner = getResource(workflow.ownerUuid)(getState().resources); + const basicInitialData: RunProcessBasicFormData = { name: `Copy of: ${process.name}`, description: process.description, owner }; dispatch(initialize(RUN_PROCESS_BASIC_FORM, basicInitialData)); const advancedInitialData: RunProcessAdvancedFormData = { diff --git a/src/store/run-process-panel/run-process-panel-actions.ts b/src/store/run-process-panel/run-process-panel-actions.ts index f3352eb4..95bac0c2 100644 --- a/src/store/run-process-panel/run-process-panel-actions.ts +++ b/src/store/run-process-panel/run-process-panel-actions.ts @@ -21,6 +21,9 @@ import { } from 'views/run-process-panel/run-process-advanced-form'; import { dialogActions } from 'store/dialog/dialog-actions'; import { setBreadcrumbs } from 'store/breadcrumbs/breadcrumbs-actions'; +import { getResource } from 'store/resources/resources'; +import { ProjectResource } from "models/project"; +import { UserResource } from "models/user"; export const runProcessPanelActions = unionize({ SET_PROCESS_PATHNAME: ofType(), @@ -48,7 +51,7 @@ export type RunProcessPanelAction = UnionOf; export const loadRunProcessPanel = () => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { try { - dispatch(setBreadcrumbs([{ label: 'Run workflow' }])); + dispatch(setBreadcrumbs([{ label: 'Run Process' }])); const response = await services.workflowService.list(); dispatch(runProcessPanelActions.SET_WORKFLOWS(response.items)); } catch (e) { @@ -99,17 +102,19 @@ export const setWorkflow = (workflow: WorkflowResource, isWorkflowChanged = true const advancedFormValues = getWorkflowRunnerSettings(workflow); + const owner = getResource(getState().runProcessPanel.processOwnerUuid)(getState().resources); + if (isStepChanged && isWorkflowChanged) { dispatch(runProcessPanelActions.SET_STEP_CHANGED(false)); dispatch(runProcessPanelActions.SET_SELECTED_WORKFLOW(workflow)); dispatch(loadPresets(workflow.uuid)); - dispatch(initialize(RUN_PROCESS_BASIC_FORM, { name: workflow.name })); + dispatch(initialize(RUN_PROCESS_BASIC_FORM, { name: workflow.name, owner })); dispatch(initialize(RUN_PROCESS_ADVANCED_FORM, advancedFormValues)); } if (!isWorkflowChanged) { dispatch(runProcessPanelActions.SET_SELECTED_WORKFLOW(workflow)); dispatch(loadPresets(workflow.uuid)); - dispatch(initialize(RUN_PROCESS_BASIC_FORM, { name: workflow.name })); + dispatch(initialize(RUN_PROCESS_BASIC_FORM, { name: workflow.name, owner })); dispatch(initialize(RUN_PROCESS_ADVANCED_FORM, advancedFormValues)); } }; @@ -146,7 +151,7 @@ export const runProcess = async (dispatch: Dispatch, getState: () => RootSt const userUuid = getUserUuid(getState()); if (!userUuid) { return; } const { processOwnerUuid, selectedWorkflow } = state.runProcessPanel; - const ownerUUid = processOwnerUuid ? processOwnerUuid : userUuid; + const ownerUUid = basicForm.owner ? basicForm.owner.uuid : (processOwnerUuid ? processOwnerUuid : userUuid); if (selectedWorkflow) { const advancedForm = getFormValues(RUN_PROCESS_ADVANCED_FORM)(state) as RunProcessAdvancedFormData || getWorkflowRunnerSettings(selectedWorkflow); const newProcessData = { diff --git a/src/store/workflow-panel/workflow-panel-actions.ts b/src/store/workflow-panel/workflow-panel-actions.ts index b533717e..85f0b9bc 100644 --- a/src/store/workflow-panel/workflow-panel-actions.ts +++ b/src/store/workflow-panel/workflow-panel-actions.ts @@ -15,6 +15,9 @@ import { initialize } from 'redux-form'; import { RUN_PROCESS_BASIC_FORM } from 'views/run-process-panel/run-process-basic-form'; import { RUN_PROCESS_INPUTS_FORM } from 'views/run-process-panel/run-process-inputs-form'; import { RUN_PROCESS_ADVANCED_FORM } from 'views/run-process-panel/run-process-advanced-form'; +import { getResource, ResourcesState } from 'store/resources/resources'; +import { ProjectResource } from 'models/project'; +import { UserResource } from 'models/user'; export const WORKFLOW_PANEL_ID = "workflowPanel"; const UUID_PREFIX_PROPERTY_NAME = 'uuidPrefix'; @@ -50,12 +53,14 @@ export const openRunProcess = (workflowUuid: string, ownerUuid?: string, name?: dispatch(loadPresets(workflow.uuid)); dispatch(initialize(RUN_PROCESS_ADVANCED_FORM, getWorkflowRunnerSettings(workflow))); + let owner; if (ownerUuid) { dispatch(runProcessPanelActions.SET_PROCESS_OWNER_UUID(ownerUuid)); + owner = getResource(ownerUuid)(getState().resources); } - if (name) { - dispatch(initialize(RUN_PROCESS_BASIC_FORM, { name })); - } + + dispatch(initialize(RUN_PROCESS_BASIC_FORM, { name, owner })); + if (inputObj) { dispatch(initialize(RUN_PROCESS_INPUTS_FORM, inputObj)); } diff --git a/src/views/run-process-panel/inputs/project-input.tsx b/src/views/run-process-panel/inputs/project-input.tsx index 03e02920..95f3ad89 100644 --- a/src/views/run-process-panel/inputs/project-input.tsx +++ b/src/views/run-process-panel/inputs/project-input.tsx @@ -4,12 +4,12 @@ import React from 'react'; import { connect, DispatchProp } from 'react-redux'; -import { Field } from 'redux-form'; +import { Field, WrappedFieldProps } from 'redux-form'; import { Input, Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@material-ui/core'; import { GenericCommandInputParameter } from 'models/workflow'; -import { GenericInputProps, GenericInput } from './generic-input'; +import { GenericInput, GenericInputProps } from './generic-input'; import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker'; import { initProjectsTreePicker } from 'store/tree-picker/tree-picker-actions'; import { TreeItem } from 'components/tree/tree'; @@ -17,17 +17,16 @@ import { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/ge import { ProjectResource } from 'models/project'; import { ResourceKind } from 'models/resource'; -const WORKFLOW_OWNER_PROJECT = "WORKFLOW_OWNER_PROJECT"; +export type ProjectCommandInputParameter = GenericCommandInputParameter; export interface ProjectInputProps { + input: ProjectCommandInputParameter; options?: { showOnlyOwned: boolean, showOnlyWritable: boolean }; } -export const ProjectInput = ({ options }: ProjectInputProps) => +export const ProjectInput = ({ input, options }: ProjectInputProps) => { @@ -51,7 +50,7 @@ const ProjectInputComponent = connect()( componentDidMount() { this.props.dispatch( - initProjectsTreePicker(WORKFLOW_OWNER_PROJECT)); + initProjectsTreePicker(this.props.commandInput.id)); } render() { @@ -106,8 +105,7 @@ const ProjectInputComponent = connect()( Choose a project diff --git a/src/views/run-process-panel/run-process-basic-form.tsx b/src/views/run-process-panel/run-process-basic-form.tsx index 1417c074..a8005ad2 100644 --- a/src/views/run-process-panel/run-process-basic-form.tsx +++ b/src/views/run-process-panel/run-process-basic-form.tsx @@ -6,16 +6,19 @@ import React from 'react'; import { reduxForm, Field } from 'redux-form'; import { Grid } from '@material-ui/core'; import { TextField } from 'components/text-field/text-field'; -import { ProjectInput } from 'views/run-process-panel/inputs/project-input'; +import { ProjectInput, ProjectCommandInputParameter } from 'views/run-process-panel/inputs/project-input'; import { PROCESS_NAME_VALIDATION } from 'validators/validators'; +import { ProjectResource } from 'models/project'; +import { UserResource } from 'models/user'; export const RUN_PROCESS_BASIC_FORM = 'runProcessBasicForm'; export interface RunProcessBasicFormData { name: string; description: string; - ownerUuid?: string; + owner?: ProjectResource | UserResource; } + export const RunProcessBasicForm = reduxForm({ form: RUN_PROCESS_BASIC_FORM @@ -37,10 +40,11 @@ export const RunProcessBasicForm = label="Enter a description for run process" /> - + );