// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: AGPL-3.0

import * as React from 'react';
import { WrappedFieldProps } from 'redux-form';
import { FormGroup, FormLabel, Input, FormHelperText, FormControl } from '@material-ui/core';
import { GenericCommandInputParameter, getInputLabel, isRequiredInput } from '../../../models/workflow';

export type GenericInputProps = WrappedFieldProps & {
    commandInput: GenericCommandInputParameter<any, any>;
};

type GenericInputContainerProps = GenericInputProps & {
    component: React.ComponentType<GenericInputProps>;
};
export const GenericInput = ({ component: Component, ...props }: GenericInputContainerProps) => {
    return <FormGroup>
        <FormLabel
            focused={props.meta.active}
            required={isRequiredInput(props.commandInput)}
            error={props.meta.touched && !!props.meta.error}>
            {getInputLabel(props.commandInput)}
        </FormLabel>
        <Component {...props} />
        <FormHelperText error={props.meta.touched && !!props.meta.error}>
            {
                props.meta.touched && props.meta.error
                    ? props.meta.error
                    : props.commandInput.doc
            }
        </FormHelperText>
    </FormGroup>;
};