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 + Choose a project + + + + + + + + ; + } + + });