X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/8c5147b7367e994e897357766a85e9b7b8e28f24..f912f003853b42c745041796220e28536629a548:/src/views/run-process-panel/inputs/project-input.tsx
diff --git a/src/views/run-process-panel/inputs/project-input.tsx b/src/views/run-process-panel/inputs/project-input.tsx
new file mode 100644
index 00000000..03e02920
--- /dev/null
+++ b/src/views/run-process-panel/inputs/project-input.tsx
@@ -0,0 +1,125 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { connect, DispatchProp } from 'react-redux';
+import { Field } 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 { 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 { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker';
+import { ProjectResource } from 'models/project';
+import { ResourceKind } from 'models/resource';
+
+const WORKFLOW_OWNER_PROJECT = "WORKFLOW_OWNER_PROJECT";
+
+export interface ProjectInputProps {
+ options?: { showOnlyOwned: boolean, showOnlyWritable: boolean };
+}
+export const ProjectInput = ({ options }: ProjectInputProps) =>
+ ;
+
+const format = (value?: ProjectResource) => value ? value.name : '';
+
+interface ProjectInputComponentState {
+ open: boolean;
+ project?: ProjectResource;
+}
+
+const ProjectInputComponent = connect()(
+ class ProjectInputComponent extends React.Component {
+ state: ProjectInputComponentState = {
+ open: false,
+ };
+
+ componentDidMount() {
+ this.props.dispatch(
+ initProjectsTreePicker(WORKFLOW_OWNER_PROJECT));
+ }
+
+ render() {
+ return <>
+ {this.renderInput()}
+ {this.renderDialog()}
+ >;
+ }
+
+ openDialog = () => {
+ this.setState({ open: true });
+ }
+
+ closeDialog = () => {
+ this.setState({ open: false });
+ }
+
+ submit = () => {
+ this.closeDialog();
+ this.props.input.onChange(this.state.project);
+ }
+
+ setProject = (_: {}, { data }: TreeItem) => {
+ if ('kind' in data && data.kind === ResourceKind.PROJECT) {
+ this.setState({ project: data });
+ } else {
+ this.setState({ project: undefined });
+ }
+ }
+
+ renderInput() {
+ return
+ }
+ {...this.props} />;
+ }
+
+ renderDialog() {
+ return ;
+ }
+
+ });