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;