import * as React from 'react'; import MuiTextField from '@mui/material/TextField'; import CircularProgress from '@mui/material/CircularProgress'; import PropTypes from 'prop-types'; import useDynamicFields from 'hooks/useDynamicFields'; import useDynamicData from 'hooks/useDynamicData'; import PowerInput from 'components/PowerInput'; import CodeEditor from 'components/CodeEditor'; import TextField from 'components/TextField'; import ControlledAutocomplete from 'components/ControlledAutocomplete'; import ControlledCustomAutocomplete from 'components/ControlledCustomAutocomplete'; import DynamicField from 'components/DynamicField'; import { FieldPropType } from 'propTypes/propTypes'; const optionGenerator = (options) => options?.map(({ name, value }) => ({ label: name, value: value })); function InputCreator(props) { const { onChange, onBlur, schema, namePrefix, stepId, disabled, showOptionValue, shouldUnregister, } = props; const { key: name, label, required, readOnly = false, value, description, type, } = schema; const { data, loading } = useDynamicData(stepId, schema); const { data: additionalFieldsData, isLoading: isDynamicFieldsLoading } = useDynamicFields(stepId, schema); const additionalFields = additionalFieldsData?.data; const computedName = namePrefix ? `${namePrefix}.${name}` : name; if (type === 'dynamic') { return ( ); } if (type === 'dropdown') { const preparedOptions = schema.options || optionGenerator(data); return ( {!schema.variables && ( ( )} defaultValue={value} description={description} loading={loading} disabled={disabled} showOptionValue={showOptionValue} shouldUnregister={shouldUnregister} componentsProps={{ popper: { className: 'nowheel' } }} /> )} {schema.variables && ( )} {isDynamicFieldsLoading && !additionalFields?.length && (
)} {additionalFields?.map((field) => ( ))}
); } if (type === 'code') { return ( ); } if (type === 'string') { if (schema.variables) { return ( {isDynamicFieldsLoading && !additionalFields?.length && (
)} {additionalFields?.map((field) => ( ))}
); } return ( {isDynamicFieldsLoading && !additionalFields?.length && (
)} {additionalFields?.map((field) => ( ))}
); } return ; } InputCreator.propTypes = { onChange: PropTypes.func, onBlur: PropTypes.func, schema: FieldPropType.isRequired, namePrefix: PropTypes.string, stepId: PropTypes.string, disabled: PropTypes.bool, showOptionValue: PropTypes.bool, shouldUnregister: PropTypes.bool, }; export default InputCreator;