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<Process> => {
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<ProjectResource | UserResource>(workflow.ownerUuid)(getState().resources);
+ const basicInitialData: RunProcessBasicFormData = { name: `Copy of: ${process.name}`, description: process.description, owner };
dispatch<any>(initialize(RUN_PROCESS_BASIC_FORM, basicInitialData));
const advancedInitialData: RunProcessAdvancedFormData = {
} 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<string>(),
export const loadRunProcessPanel = () =>
async (dispatch: Dispatch<any>, 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) {
const advancedFormValues = getWorkflowRunnerSettings(workflow);
+ const owner = getResource<ProjectResource | UserResource>(getState().runProcessPanel.processOwnerUuid)(getState().resources);
+
if (isStepChanged && isWorkflowChanged) {
dispatch(runProcessPanelActions.SET_STEP_CHANGED(false));
dispatch(runProcessPanelActions.SET_SELECTED_WORKFLOW(workflow));
dispatch<any>(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<any>(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));
}
};
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 = {
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';
dispatch<any>(loadPresets(workflow.uuid));
dispatch(initialize(RUN_PROCESS_ADVANCED_FORM, getWorkflowRunnerSettings(workflow)));
+ let owner;
if (ownerUuid) {
dispatch(runProcessPanelActions.SET_PROCESS_OWNER_UUID(ownerUuid));
+ owner = getResource<ProjectResource | UserResource>(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));
}
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';
import { ProjectResource } from 'models/project';
import { ResourceKind } from 'models/resource';
-const WORKFLOW_OWNER_PROJECT = "WORKFLOW_OWNER_PROJECT";
+export type ProjectCommandInputParameter = GenericCommandInputParameter<ProjectResource, ProjectResource>;
export interface ProjectInputProps {
+ input: ProjectCommandInputParameter;
options?: { showOnlyOwned: boolean, showOnlyWritable: boolean };
}
-export const ProjectInput = ({ options }: ProjectInputProps) =>
+export const ProjectInput = ({ input, options }: ProjectInputProps) =>
<Field
- name={WORKFLOW_OWNER_PROJECT}
- commandInput={{
- label: "Owner project"
- }}
+ name={input.id}
+ commandInput={input}
component={ProjectInputComponent as any}
format={format}
{...{
project?: ProjectResource;
}
-const ProjectInputComponent = connect()(
+export const ProjectInputComponent = connect()(
class ProjectInputComponent extends React.Component<GenericInputProps & DispatchProp & {
options?: { showOnlyOwned: boolean, showOnlyWritable: boolean };
}, ProjectInputComponentState> {
componentDidMount() {
this.props.dispatch<any>(
- initProjectsTreePicker(WORKFLOW_OWNER_PROJECT));
+ initProjectsTreePicker(this.props.commandInput.id));
}
render() {
<DialogTitle>Choose a project</DialogTitle>
<DialogContent>
<ProjectsTreePicker
- pickerId={WORKFLOW_OWNER_PROJECT}
- includeCollections
+ pickerId={this.props.commandInput.id}
options={this.props.options}
toggleItemActive={this.setProject} />
</DialogContent>
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<RunProcessBasicFormData>({
form: RUN_PROCESS_BASIC_FORM
label="Enter a description for run process" />
</Grid>
<Grid item xs={12} md={6}>
- <Field
- name='ownerUuid'
- component={ProjectInput as any}
- label="Project to run the process in" />
+ <ProjectInput input={{
+ id: "owner",
+ label: "Project where the workflow will run"
+ } as ProjectCommandInputParameter}
+ options={{ showOnlyOwned: false, showOnlyWritable: true }} />
</Grid>
</Grid>
</form>);