// 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, WrappedFieldProps } from 'redux-form'; import { Input, Dialog, DialogTitle, DialogContent, DialogActions, Button } from '@material-ui/core'; import { GenericCommandInputParameter } from 'models/workflow'; 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 { ProjectsTreePickerItem } from 'views-components/projects-tree-picker/generic-projects-tree-picker'; import { ProjectResource } from 'models/project'; import { ResourceKind } from 'models/resource'; export type ProjectCommandInputParameter = GenericCommandInputParameter; export interface ProjectInputProps { input: ProjectCommandInputParameter; options?: { showOnlyOwned: boolean, showOnlyWritable: boolean }; } export const ProjectInput = ({ input, options }: ProjectInputProps) => ; const format = (value?: ProjectResource) => value ? value.name : ''; interface ProjectInputComponentState { open: boolean; project?: ProjectResource; } export const ProjectInputComponent = connect()( class ProjectInputComponent extends React.Component { state: ProjectInputComponentState = { open: false, }; componentDidMount() { this.props.dispatch( initProjectsTreePicker(this.props.commandInput.id)); } 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 ; } });