import {Scope} from 'sentry/types'; import BlankField from './blankField'; import BooleanField, {BooleanFieldProps} from './booleanField'; import ChoiceMapperField, {ChoiceMapperFieldProps} from './choiceMapperField'; import DateTimeField, {DateTimeFieldProps} from './dateTimeField'; import EmailField, {EmailFieldProps} from './emailField'; import {FieldProps} from './field'; import FieldSeparator from './fieldSeparator'; import FileField, {FileFieldProps} from './fileField'; import HiddenField, {HiddenFieldProps} from './hiddenField'; import InputField, {InputFieldProps} from './inputField'; import NumberField from './numberField'; import ProjectMapperField from './projectMapperField'; import RadioField, {RadioFieldProps} from './radioField'; import RangeField, {RangeFieldProps} from './rangeField'; import SelectAsyncField, {SelectAsyncFieldProps} from './selectAsyncField'; import SelectField, {SelectFieldProps} from './selectField'; import SentryProjectSelectorField, {RenderFieldProps} from './sentryProjectSelectorField'; import TableField from './tableField'; import TextareaField, {TextareaFieldProps} from './textareaField'; import TextField from './textField'; import {Field} from './type'; interface FieldFromConfigProps { field: Field; access?: Set; disabled?: boolean | ((props) => boolean); flexibleControlStateSize?: boolean; getData?: (data) => any; highlighted?: boolean; inline?: boolean; noOptionsMessage?: () => string; onBlur?: (value, event) => void; stacked?: boolean; } function FieldFromConfig(props: FieldFromConfigProps): React.ReactElement | null { const {field, ...otherProps} = props; const componentProps = { ...otherProps, ...field, }; switch (field.type) { case 'separator': return ; case 'secret': return ; case 'range': return ; case 'blank': return ; case 'bool': case 'boolean': return ; case 'email': return ; case 'hidden': return ; case 'string': case 'text': case 'url': if (componentProps.multiline) { return ; } return ; case 'number': return ; case 'textarea': return ; case 'choice': case 'select': case 'array': return )} />; case 'choice_mapper': return ; case 'radio': if (Array.isArray(componentProps.choices)) { return ; } throw new Error('Invalid `choices` type. Use an array of options'); case 'table': return ; case 'project_mapper': return ; case 'sentry_project_selector': return ; case 'select_async': return ; case 'file': return ; case 'datetime': return ; case 'custom': return field.Component(field); default: return null; } } export default FieldFromConfig;