import PropTypes from 'prop-types'; import React from 'react'; import Link from 'Components/Link/Link'; import { inputTypes } from 'Helpers/Props'; import AutoCompleteInput from './AutoCompleteInput'; import CaptchaInputConnector from './CaptchaInputConnector'; import CheckInput from './CheckInput'; import DeviceInputConnector from './DeviceInputConnector'; import DownloadClientSelectInputConnector from './DownloadClientSelectInputConnector'; import EnhancedSelectInput from './EnhancedSelectInput'; import EnhancedSelectInputConnector from './EnhancedSelectInputConnector'; import FormInputHelpText from './FormInputHelpText'; import IndexerSelectInputConnector from './IndexerSelectInputConnector'; import KeyValueListInput from './KeyValueListInput'; import MonitorEpisodesSelectInput from './MonitorEpisodesSelectInput'; import NumberInput from './NumberInput'; import OAuthInputConnector from './OAuthInputConnector'; import PasswordInput from './PasswordInput'; import PathInputConnector from './PathInputConnector'; import QualityProfileSelectInputConnector from './QualityProfileSelectInputConnector'; import RootFolderSelectInputConnector from './RootFolderSelectInputConnector'; import SeriesTypeSelectInput from './SeriesTypeSelectInput'; import TagInputConnector from './TagInputConnector'; import TagSelectInputConnector from './TagSelectInputConnector'; import TextArea from './TextArea'; import TextInput from './TextInput'; import TextTagInputConnector from './TextTagInputConnector'; import UMaskInput from './UMaskInput'; import styles from './FormInputGroup.css'; function getComponent(type) { switch (type) { case inputTypes.AUTO_COMPLETE: return AutoCompleteInput; case inputTypes.CAPTCHA: return CaptchaInputConnector; case inputTypes.CHECK: return CheckInput; case inputTypes.DEVICE: return DeviceInputConnector; case inputTypes.KEY_VALUE_LIST: return KeyValueListInput; case inputTypes.MONITOR_EPISODES_SELECT: return MonitorEpisodesSelectInput; case inputTypes.NUMBER: return NumberInput; case inputTypes.OAUTH: return OAuthInputConnector; case inputTypes.PASSWORD: return PasswordInput; case inputTypes.PATH: return PathInputConnector; case inputTypes.QUALITY_PROFILE_SELECT: return QualityProfileSelectInputConnector; case inputTypes.INDEXER_SELECT: return IndexerSelectInputConnector; case inputTypes.DOWNLOAD_CLIENT_SELECT: return DownloadClientSelectInputConnector; case inputTypes.ROOT_FOLDER_SELECT: return RootFolderSelectInputConnector; case inputTypes.SELECT: return EnhancedSelectInput; case inputTypes.DYNAMIC_SELECT: return EnhancedSelectInputConnector; case inputTypes.SERIES_TYPE_SELECT: return SeriesTypeSelectInput; case inputTypes.TAG: return TagInputConnector; case inputTypes.TEXT_AREA: return TextArea; case inputTypes.TEXT_TAG: return TextTagInputConnector; case inputTypes.TAG_SELECT: return TagSelectInputConnector; case inputTypes.UMASK: return UMaskInput; default: return TextInput; } } function FormInputGroup(props) { const { className, containerClassName, inputClassName, type, unit, buttons, helpText, helpTexts, helpTextWarning, helpLink, pending, errors, warnings, ...otherProps } = props; const InputComponent = getComponent(type); const checkInput = type === inputTypes.CHECK; const hasError = !!errors.length; const hasWarning = !hasError && !!warnings.length; const buttonsArray = React.Children.toArray(buttons); const lastButtonIndex = buttonsArray.length - 1; const hasButton = !!buttonsArray.length; return (