import * as React from 'react'; import MuiTextField from '@mui/material/TextField'; import CircularProgress from '@mui/material/CircularProgress'; import type { IField, IFieldDropdownOption } from '@automatisch/types'; import useDynamicFields from 'hooks/useDynamicFields'; import useDynamicData from 'hooks/useDynamicData'; import PowerInput from 'components/PowerInput'; import TextField from 'components/TextField'; import ControlledAutocomplete from 'components/ControlledAutocomplete'; import ControlledCustomAutocomplete from 'components/ControlledCustomAutocomplete'; import DynamicField from 'components/DynamicField'; type InputCreatorProps = { onChange?: React.ChangeEventHandler; onBlur?: React.FocusEventHandler; schema: IField; namePrefix?: string; stepId?: string; disabled?: boolean; showOptionValue?: boolean; shouldUnregister?: boolean; }; type RawOption = { name: string; value: string; }; const optionGenerator = (options: RawOption[]): IFieldDropdownOption[] => options?.map(({ name, value }) => ({ label: name as string, value: value })); export default function InputCreator( props: InputCreatorProps ): React.ReactElement { 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: additionalFields, loading: additionalFieldsLoading } = useDynamicFields(stepId, schema); const computedName = namePrefix ? `${namePrefix}.${name}` : name; if (type === 'dynamic') { return ( ); } if (type === 'dropdown') { const preparedOptions = schema.options || optionGenerator(data); return ( {!schema.variables && ( } defaultValue={value as string} description={description} loading={loading} disabled={disabled} showOptionValue={showOptionValue} shouldUnregister={shouldUnregister} /> )} {schema.variables && ( } defaultValue={value as string} description={description} loading={loading} disabled={disabled} showOptionValue={showOptionValue} shouldUnregister={shouldUnregister} /> )} {additionalFieldsLoading && !additionalFields?.length && (
)} {additionalFields?.map((field) => ( ))}
); } if (type === 'string') { if (schema.variables) { return ( {additionalFieldsLoading && !additionalFields?.length && (
)} {additionalFields?.map((field) => ( ))}
); } return ( {additionalFieldsLoading && !additionalFields?.length && (
)} {additionalFields?.map((field) => ( ))}
); } return ; }